我從外部API中提取一些數據,然後將其顯示在儀表板頁面中。要做到這一點,我生成的DOM元素一旦我處理的數據,例如:將事件處理程序附加到JQuery生成的DOM元素
for(var key in companies) {
$(document.createElement("span"))
.attr({ id: key })
.appendTo($("#someDiv"))
.click(function() {
alert(key);
});
$("#"+key).html("<b>" + key + "</b>: $"+companies[key]+"<br>");
}
然而,當我點擊任何新生成的span
元素,我得到一個警報的最後一個值在companies
。例如,如果我宣佈:
var companies = {
"Google": 3,
"Apple": 4
};
然後點擊這兩個谷歌span
和蘋果span
將提醒4
。我希望的行爲是點擊Google span
以提醒3
。
爲什麼返回調用'alert(key)'的函數會產生與調用'alert(key)'不同的行爲? – 2013-05-11 18:50:18
這是一個閉包,將鍵的值保存在函數中,因爲鍵的每一次循環都會改變。 – adeneo 2013-05-11 18:51:47