可能重复:
Javascript臭名昭著的循环问题?
出于某种原因,我在函数中为每个 div 元素得到“6”:
for(var i = 1; i <= 5; i++){
$('<div class="e-' + i + '"></div>').appendTo(something).click(function(){
alert(i); // <-- it's 6. wtf??
});
}
而不是 1、2、3 等。
另一方面,该类似乎已正确设置..
我究竟做错了什么?
可能重复:
Javascript臭名昭著的循环问题?
出于某种原因,我在函数中为每个 div 元素得到“6”:
for(var i = 1; i <= 5; i++){
$('<div class="e-' + i + '"></div>').appendTo(something).click(function(){
alert(i); // <-- it's 6. wtf??
});
}
而不是 1、2、3 等。
另一方面,该类似乎已正确设置..
我究竟做错了什么?
您的for循环正在页面加载时执行。只有在 for 循环完成后发生单击事件时才会触发警报。因此,现在的值i是 6。
1)页面加载,for循环做它的东西......
2) 稍后会触发点击事件。此时的值为i6,因为for循环已经完成。
问题是您需要创建一个闭包来捕获绑定点击函数时的值。i
试试这个:
for(var i = 1; i <= 5; i++)
{
$('<div class="e-' + i + '"></div>')
.appendTo(something)
.click(function(value)
{
return function() { alert(value) };
}(i));
}