【发布时间】:2012-09-29 07:57:14
【问题描述】:
我的代码中的循环需要帮助。
我遍历一个数组并添加对 div 的点击。但它总是将 onclicks 添加到循环的最后一个循环,并有效地取消之前的循环。
所以我有这个作为我的循环:
start = 0;
for(i = start; i < (start+8); i++){ //8 per page
if(i == array.length){
break; //page end
} else {
(function(i){
document.getElementById('cell'+i).onclick = function(){ select(i); }
})(i);
}
}
这里发生的是 div id cell7 添加了点击,但 div id cell0 到 cell6 没有。我猜这与i 在循环中发生变化的事实有关,因此函数中的i 也会受到影响?
我该如何解决这个问题?
【问题讨论】:
-
我不使用 jquery 或任何库,因此指向 jquery 的解决方案并不是很有用。
-
@Dave:这是你的实际代码吗?您正在关闭
i变量,因此每次迭代都会创建一个单独的范围,该范围具有自己的i与外部循环的i分开。 -
是的,这是我的代码 - 我没有关注
closing over the i? -
@user1689607 嗯,没错。
-
@Dave 立即调用的函数使用自己的
i变量创建一个新的变量范围。在该函数调用中创建的处理程序关闭本地i变量,并保留对它的引用。基本上,您已经用内部i遮盖了外部i,因此您的处理程序将引用该i并正常工作。
标签: javascript