[英]Uncaught TypeError: button.addEventListener is not a function
I am learning js on my own and I am new in programming. 我正在自己学习js,并且是编程的新手。 I am stuck on the below code and any help will be much appreciated:
我坚持下面的代码,任何帮助将不胜感激:
<div id="container">
<h1>To-Do list</h1>
<input type="text">
<ul>
<li><span>X</span> one</li>
<li><span>X</span> two</li>
<li><span>X</span> three</li>
</ul>
</div>
Javascript part: Javascript部分:
let li = document.getElementsByTagName("li");
let button = document.getElementsByTagName("span");
button.addEventListener("click", function() {
console.log("clicked");
})
This throwing an error saying that it is not a function. 这抛出一个错误,表明它不是函数。 Where is my mistake?
我的错误在哪里?
The function Element.getElementsByTagName()
returns a HTMLCollection of elements, you need to loop over it to bind the events. 函数
Element.getElementsByTagName()
返回元素的HTMLCollection,您需要对其进行循环以绑定事件。
let li = document.getElementsByTagName("li"); let buttons = document.getElementsByTagName("span"); Array.from(buttons).forEach(b => { b.addEventListener("click", function() { console.log("clicked"); }); });
<div id="container"> <h1>To-Do list</h1> <input type="text"> <ul> <li><span>X</span> one</li> <li><span>X</span> two</li> <li><span>X</span> three</li> </ul> </div>
getElementsByTagName
returns a list of elements getElementsByTagName
返回元素列表
we can addEventListener on every element 我们可以在每个元素上添加eventListener
let li = document.getElementsByTagName("li"); let button = document.getElementsByTagName("span"); console.log(button); // list of elements // and we have to addEventListener on every element Array.prototype.map.call(button, (b) => { b.addEventListener("click", function() { console.log("clicked"); }) })
<div id="container"> <h1>To-Do list</h1> <input type="text"> <ul> <li><span>X</span> one</li> <li><span>X</span> two</li> <li><span>X</span> three</li> </ul> </div>
Or we can addEventListener
on parent element ( ul
for example): 或者我们可以
addEventListener
父元素(在ul
为例):
document.querySelector('ul').addEventListener("click", function(e) {
console.log(e.target); // this will helps us to figure out on what exact element a click was made
console.log("clicked");
})
You could just iterate over the buttons like so: 您可以像这样遍历按钮:
let li = document.getElementsByTagName("li");
let buttons = document.getElementsByTagName("span");
[].forEach.call(buttons, function(button) {
button.addEventListener("click", function() {
console.log("You clicked!");
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.