javascript - 事件处理程序仅在将事件作为参数传递时才起作用 - 为什么?
问题描述
我想构建一个函数来切换/取消切换列表的所有项目(populateList()
是一个单独的函数来编写实际的 html):
function toggleAll(event, check) {
items.forEach(item => {
if (check === "check") {
item.done = true;
} else {
item.done = false;
}
});
localStorage.setItem("items", JSON.stringify(items));
populateList(items, itemsList);
}
单击相应的按钮 ( checkAll
/ uncheckAll
) 时,应触发该功能:
const checkAll = document.querySelector(".check");
const uncheckAll = document.querySelector(".uncheck");
checkAll.addEventListener("click", toggleAll("check"));
uncheckAll.addEventListener("click", toggleAll("uncheck"));
显然这不起作用。由于某些原因,该功能toggleAll
仅在页面加载时运行一次,按钮没有反应。我尝试使用以下代码传递事件本身:
checkAll.addEventListener("click", (event) => toggleAll(event, "check"));
uncheckAll.addEventListener("click", (event) => toggleAll(event, "uncheck"));
这工作得很好!我不知道为什么。有人可以请教我吗?我在这里俯瞰什么?
解决方案
推荐阅读
- python - Python数据包嗅探器故障排除
- javascript - 如何破坏包含以点为键的长字符串的对象
- amazon-web-services - 如何将 .dev 域链接到 EC2 实例
- java - Java GUI:年龄计算器:试图让我的 Output.Text.setText 输出当前年份 - 出生年份
- react-native - 如何使用导航器代码上的 headerRight 导航到其他屏幕?
- sql - ORACLE SQL TRUNC 日期更改
- go - 在 Golang 中通过 Context 取消 net.Listener
- mongodb - 从 3x 嵌套数组中的字段中获取值 x,y
- c# - 如果我在文本文件中没有相同的行数,则不会显示按钮
- delphi - 如何禁用 TVertScrollBar 内的列表框滚动