2017-02-24 55 views
1

我有一个问题。我有X子元素(按钮等)和子单元内的div元素,我将用循环添加一个事件监听,我提供了一个小提琴:Javascript Eventlistener循环与自己的属性

<button test="page1">page1</button> 
<button test="page2">page2</button> 
<br> 
<button test2="page1">page1</button> 
<button test2="page2">page2</button> 



var location = document.querySelectorAll("[test]"); 
var location2 = document.querySelectorAll("[test2]"); 

location.forEach(function(e1, e2){ 
    location[e2].addEventListener("click", function(){ 
    alert(location[e2].getAttribute("test")); 
    }); 
}); 

for(var i = 0; i < location2.length; i++){ 
    location2[i].addEventListener("click", function(){ 
    alert(location2[i].getAttribute("test2")); 
    }); 
} 

https://jsfiddle.net/zeus1309/jqL8b0rt/

用foreach作品的版本。但是没有的那个。 我不明白为什么。

+0

要当心,节点列表的实例(从document.querySelectorAll)不具有的forEach方法。之前写下:“NodeList.prototype.forEach = Array.prototype.forEach;” – karkael

+0

也谢谢! –

回答

0

而不是location2[i].getAttribute("test2")使用this.getAttribute("test2")

注意:在forEach()函数中,您不必使用两个参数。

var location = document.querySelectorAll("[test]"); 
 
var location2 = document.querySelectorAll("[test2]"); 
 

 
location.forEach(function(e){ 
 
    e.addEventListener("click", function(){ 
 
    alert(e.getAttribute("test")); 
 
    }); 
 
}); 
 

 

 
for(var i = 0; i < location2.length; i++){ 
 
\t location2[i].addEventListener("click", function(){ 
 
    \t alert(this.getAttribute("test2")); 
 
    }); 
 
}
<button test="page1">page1</button> 
 
<button test="page2">page2</button> 
 
<br> 
 
<button test2="page1">page1</button> 
 
<button test2="page2">page2</button>

+1

非常感谢! –