2014-03-12 112 views
0

我將偵聽器附加到div的所有子級,如何使它們以相對於其父級的編號進行警報。因爲該函數執行實際變量i,而不是附加。從循環中添加帶參數i的事件偵聽器

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

所以唯一的解決方案是使用eval('i')?

回答

2

使用閉包,並通過指數

var nodes = div.children; //10 nodes 
for (var i = 0; i < nodes.length; i++) { 
    (function(index){ 
     nodes[index].onclick = function() {alert(index)} 
    })(i); 
} 
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 
}