从循环中为参数i添加事件监听器

时间:2014-03-12 04:41:04

标签: javascript

我将听众附加到div的所有孩子,如何让他们提醒他们相对于他们的父母的号码。因为该函数执行实际变量i,而不是在附加时。

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

所以唯一的解决方案是使用eval(&#39; i&#39;)?

2 个答案:

答案 0 :(得分:2)

使用闭包并传递索引

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

答案 1 :(得分:0)

另外两个可能的答案可能是:

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
}