addEventListener不适用于多个链接

时间:2016-06-04 11:15:30

标签: javascript html

我是javascript的新手,在点击事件处理程序处理多个链接时遇到问题。我的代码如下:

<body>
    <ul id="test">
        <li><a href="#">First</a></li>
        <li><a href="#">Second</a></li>
    </ul>
</body>

和JS代码:

document.querySelector("a").addEventListener("click", function() {
    alert("Hello world");
});

该活动适用于&#34; First&#34;链接,但不是第二个。我出错的任何想法。 FIDDLE

4 个答案:

答案 0 :(得分:4)

您需要使用querySelectorAll()选择每个a,然后使用for循环,因为它会返回NodeList

&#13;
&#13;
var a = document.querySelectorAll("a");
for (var i = 0; i < a.length; i++) {
  a[i].addEventListener("click", function() {
    alert("Hello world");
  });
}
&#13;
<ul id="test">
  <li><a href="#">First</a></li>
  <li><a href="#">Second</a></li>
</ul>
&#13;
&#13;
&#13;

答案 1 :(得分:2)

方法 querySelector() 只选择单个元素,而是使用 querySelectorAll() 并使用迭代器绑定click事件处理程序。

&#13;
&#13;
// convert NodeList to Array and then iterate using forEach method
Array.from(document.querySelectorAll("a")).forEach(function(ele) {
  ele.addEventListener("click", function() {
    alert("Hello world");
  })
});
&#13;
<body>
  <ul id="test">
    <li><a href="#">First</a>
    </li>
    <li><a href="#">Second</a>
    </li>
  </ul>
</body>
&#13;
&#13;
&#13;

答案 2 :(得分:2)

将此用于JS:

var links = document.getElementById("test");

links.addEventListener("click", function() {
    alert("Hello world");
});
<body>
<ul id="test">
<li><a href="#">First</a></li>
<li><a href="#">Second</a></li>
</ul>
</body>

答案 3 :(得分:0)

使用querySelectorAll代替querySelector,它将返回一个数组并在foreach中循环,并向所有人添加事件监听器。

var links = document.querySelectorAll("a");
Array.from(links).forEach(function(e) {
    e.addEventListener("click", function() {
    alert("clicked");
   })
});