JSON配列上でのボタンの動的生成に苦労しています。
簡略化されたコードは次のとおりです(目的はデータに基づいてテーブルを作成することですが、まだ何も凝っていません。私はまだこれに習熟していません):
$.ajax({
/* type, content, etc. removed */
success: function (data, textStatus, XmlHttpRequest) {
var target = $('myContainerDiv');
var result = data.d.results;
var $table = $('<table />');
for(var i=0;i < results.length; i++) {
var $row = $('<tr />');
var $cell = $('<td />');
var $button = $('<input />').attr({ type: 'button', value: 'Edit', name: 'btn' + i });
$button.click(function () {
// **
// In a .NET environment, this would become a closure
// I suspect this is the offending bit of code
//
alert(results[i].name);
};
$cell.append($button);
$row.append($cell);
$table.append($row);
}
$target.append($table);
},
/* error etc. removed*/
});
基本的に、ボタンで満たされた列が必要です。各ボタンは、$.ajax
呼び出しから取得した配列からフィールドの値をポップアップします。
ボタンは実際には表示されますが、クリックに反応せず、F12ツールコンソールにランタイムエラーは表示されません。これはおそらく、このスクリプトがMicrosoft Dynamics CRM 2011ソリューションの構成ページの一部であるという事実によるものですが、それ以外は、AJAX呼び出しは問題なく続行されると確信しています(データを印刷してみましたが、それを見ることができます)。
アップデート
クリックハンドラー内の参照i
は確かに問題のある行でした。このようにコードを変更すると、期待どおりに機能するようになりました。
var $button = $('<input />').attr({ type: 'button', value: 'Edit', name: 'btn' + results[i].name });
$button.click(function () {
// 'i' value is NOT what I thought it was !
alert(this.name.substring(3,this.name.length));
// I found out in the meanwhile that 'this' references the event source
};