我尝试使用事件侦听器将checked类添加到待办事项列表项目中。但是事件侦听器没有附加到每个复选框类。
export default function (){
const checkedElements = document.querySelectorAll(".checkbox");
checkedElements.forEach(element => {
element.addEventListener('click', () => {
element.classList.toggle('checked');
});
});
}
字符串
这里是网站https://joyal-jij0.github.io/todo-list/ &这里是存储库https://github.com/joyal-jij0/todo-list.git。在创建2-4个待办事项后,尝试单击每个复选框。我希望每个复选框都能获得事件侦听器,但有些正在获得,有些正在被删除。
3条答案
按热度按时间zzwlnbp81#
1.通过closest使用委托和相对访问
jum4pzuy2#
您的代码正在从
addTask
调用thatchecked
function。由于
checked
函数在内部循环遍历所有复选框并添加处理程序,因此它们将具有多个click处理程序,然后将多次来回切换选中状态(如果您在处理程序中添加一个策略性的console.log()
,您可以看到这一点)。您还可以在浏览器的检查器的事件侦听器列表中看到这些多个处理程序;这是我添加4个项目后的第一个复选框。
x1c 0d1x的数据
IOW,你只需要在每个新的复选框中添加一次处理程序。
rmbxnbpk3#
事件委托
您可以将事件侦听器添加到父元素而不是每个元素,如下所示:
阅读更多: