我正在努力通過JSON數組動態生成按鈕。通過jQuery爲表中的xmlhttprequest 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調用繼續進行(我試圖使其打印出數據,而我可以看到它)。
UPDATE
引用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
};
而重寫代碼我有點搞砸的語法(無法複製粘貼,這是更長的警報和更長的名字......)。然而,關於'i'變量等於'results.length'的指出事實聽起來像是真正的問題。將檢查出來。 – Alex
在處理程序中擺脫了'i',並開始工作。我將編輯這個問題來指出它。 – Alex