Javascript 使用循环中的参数i为添加事件侦听器

Javascript 使用循环中的参数i为添加事件侦听器,javascript,Javascript,我将listener附加到一个div的所有子对象上,告诉他们如何使用与父对象相关的数字发出警报。因为函数执行实际变量i,而不是附加时 var nodes = div.children; //10 nodes for (var i = 0; i < nodes.length; i++) { nodes[i].onclick = function () {alert(i)} } var节点=div.children//10节点 对于(var i=0;i

我将listener附加到一个div的所有子对象上,告诉他们如何使用与父对象相关的数字发出警报。因为函数执行实际变量i,而不是附加时

var nodes = div.children; //10 nodes
for (var i = 0; i < nodes.length; i++) {
    nodes[i].onclick = function () {alert(i)}
}
var节点=div.children//10节点
对于(var i=0;i

因此,唯一的解决方案是使用eval('i')?

使用闭包并传递索引

var nodes = div.children; //10 nodes
for (var i = 0; i < nodes.length; i++) {
    (function(index){
       nodes[index].onclick = function () {alert(index)}
    })(i);
}
var节点=div.children//10节点
对于(var i=0;i
另外两个可能的答案是:

nodes[i].setAttribute('onclick','alert('+i+')');
或:

nodes[i].setAttribute('index', i);
nodes[i].onclick = function(){
    alert(this.getAttribute('index')); 
    //remember attribute index is string, so do parseInt() when required
}