我从外部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