正在做的是使用循环在类上附加事件,并在事件处理程序代码中使用索引值。这是我的代码:
var classElements=document.getElementsByClassName("a");
for(var i=0; i<4; i++)
{
classElements[i].onClick=function(){
alert("Clicked button : "+i);
}
}
当我点击任何按钮时,它会发出警告
Clicked Button : 4
可能是什么问题?
答案 0 :(得分:4)
JavaScript关闭对象并在以后调用它时对其进行评估。在调用时,i
为4。
我想你想要这样的东西:
var classElements=document.getElementsByClassName("a");
for(var i=0; i<4; i++)
{
classElements[i].onClick=function(j) {
return function(){
alert("Clicked button : "+j);
};
}(i);
}
编辑:显示命名函数以使代码更清晰
var classElements=document.getElementsByClassName("a");
for(var i=0; i<4; i++)
{
var makeFn = function(j) {
return function(){
alert("Clicked button : "+j);
};
};
classElements[i].onClick = makeFn(i);
}
答案 1 :(得分:2)
您需要一个闭包才能捕获i
的更改。正如Lou所说,这是由于后期评估。
var classElements=document.getElementsByClassName("a");
for(var i=0; i<4; i++)
classElements[i].onclick = (function(i){
return function(){ alert("Clicked button : " + i) };
})(i);