2016-02-15 40 views
-2

我在我的项目中有相同的结构!没有循环的多事件监听器

<!-- menu structure--> 
    <nav class="menu"> 
     <a class="trigger" href="#">item</a> 
     <a class="trigger" href="#">item</a> 
     <a class="trigger" href="#">item</a> 
     <a class="trigger" href="#">item</a> 
     <a class="trigger" href="#">item</a> 
    </nav> 

我想一个事件侦听器添加到所有的触发,但是我发现在使用循环的解决方案,这里是JS

menuitens = document.querySelectorAll('.trigger'); 
menuitens.addEventListener("click", function(){}); 
+0

但是你总是要循环。注意:你可以使原型函数循环为免费 – Hydro

+0

你需要使用循环!我想你想要一行像jQuery一样的东西,但jQuery也在内部使用一个循环。 – A1rPun

+2

你应该使用jQuery。它看起来像这样:''('。trigger')。on('click',function(){...});' – ventaquil

回答

0

有一个单一的事件侦听器只是将其绑定到容器而不是:

document.querySelector('.menu').addEventListener('click', function(e) { 
    e.preventDefault(); 

    if (!e.target.classList.contains('trigger')) return; 

    alert('.trigger clicked'); 
}); 

https://jsfiddle.net/t6frderh/

0

你可以听所有的点击甚至ts对容器元素:

document.querySelector(".menu").addEventListener(
    'click', 
    function(e) 
    { 
    if (e.target.classList.contains('target')) 
    { 
     // do stuff .... 
    } 
    } 
);