87,842
社区成员




因为你需要在事件内使用事件外的循环变量i。
当事件触发时,那个循环早就结束了,那时的i的值已经是循环最大值加1了。
所以需要用一些方式保存住当前循环的i的值。
方案1为:用闭包保存住当前循环的i的值。
for(var i=0;i<cRes.length;i++) {
(function(i){
cRes[i].onclick=function(){
alert("id为"+this.id+ "的编号为"+i);
}
})(i);
}
方案2为:用let块作用域变量,原理也是闭包(ie11以前不支持)
for(var i=0;i<cRes.length;i++) {
let j = i;
cRes[i].onclick=function(){
alert("id为"+this.id+ "的编号为"+j);
}
}
方案3为:在事件函数内不使用循环变量i,而是用this获取触发事件的元素
for(var i=0;i<cRes.length;i++) {
cRes[i].index = i;
cRes[i].onclick=function(){
alert("id为"+this.id+ "的编号为"+this.index);
}
}