This question already has answers here:
Adding click event listener to elements with the same class
(4个答案)
2年前关闭。
我在
的HTML:
js:
(4个答案)
2年前关闭。
我在
querySelectorAll
上遇到了一些问题。脚本仅与querySelector
一起使用,但仅删除第一个li
。当我尝试用querySelector
替换querySelectorAll
以使所有删除按钮正常工作时,出现错误-“ deleteButton.addEventListener不是函数”。的HTML:
body>
<div id="buttons">
<input type="text" placeholder="twoje zadanie...">
<button type="submit" class="add">dodaj</button>
</div>
<div id="tasks">
<ul>
<li><button class="done">done</button>
asd
<button class="delete">x</button></li>
<li>
<button class="done">done</button>
asdd
<button class="delete">x</button></li>
<li>
<button class="done">done</button>
dsad
<button class="delete">x</button></li>
</ul>
</div>
<script src="script.js"></script>
</body>
js:
var deleteButton = document.querySelectorAll('.delete');
deleteButton.addEventListener('click', function() {
var li = document.querySelector('li');
li.classList.add('li-delete');
});
最佳答案
原因:Coz querySelectorAll
为您提供匹配节点的列表。并且没有.addEve..
属性可以在列表中使用。
此外,document.querySelector('.delete');
将为您提供第一个按钮,并且只会向此按钮添加侦听器,但您不希望这样做。
如果要将侦听器添加到所有元素,则应遍历列表,并在所有匹配的元素上添加侦听器。喜欢
var el = document.querySelectorAll('.delete');
for(var i=0; i<el.length; i++){
el[i].addEventListener('click', function(){
console.log("clicked");
var li = this.parentNode;
li.classList.add('li-delete');
})
}
.li-delete{
color : red;
}
<div id="tasks">
<ul>
<li><button class="done">done</button>
asd
<button class="delete">x</button></li>
<li>
<button class="done">done</button>
asdd
<button class="delete">x</button></li>
<li>
<button class="done">done</button>
dsad
<button class="delete">x</button></li>
</ul>
</div>
关于javascript - 第一个带有querySelectorAll的待办事项列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50004540/
10-13 02:15