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 等。

另一方面,该类似乎已正确设置..

我究竟做错了什么?

4

2 回答 2

11

您的for循环正在页面加载时执行。只有在 for 循环完成后发生单击事件时才会触发警报。因此,现在的值i是 6。

1)页面加载,for循环做它的东西......

2) 稍后会触发点击事件。此时的值为i6,因为for循环已经完成。

于 2012-04-25T14:13:35.173 回答
5

问题是您需要创建一个闭包来捕获绑定点击函数时的i

试试这个:

for(var i = 1; i <= 5; i++)
{
  $('<div class="e-' + i + '"></div>')
    .appendTo(something)
    .click(function(value)
    { 
      return function() { alert(value) };
    }(i));
}
于 2012-04-25T14:15:59.923 回答