javascript - element.addEventListener 触发多次
问题描述
我尝试调试我发现的唯一一件事是每次父函数执行添加更多事件侦听器时:(
我认为第 46-69 行有问题。这是codepen链接:
const cancelDeletion = (element) => {
toggleBackdrop();
deleteModalConfirmation.classList.remove("visible");
};
const confirmDeletion = (element) => {
toggleBackdrop();
element.remove();
deleteModalConfirmation.classList.remove("visible");
};
const deleteMovieModal = (element) => {
toggleBackdrop();
deleteModalConfirmation.classList.add("visible");
cancelDeletionElement.addEventListener(
"click",
cancelDeletion.bind(this, element)
);
confirmDeletionElement.addEventListener(
"click",
confirmDeletion.bind(this, element)
);
};
解决方案
这可能是因为每次deleteMovieModal
运行时,您都会注册一个新的事件侦听器,因此当它第一次运行时您添加一个事件侦听器,而当它第二次运行时您有两个事件侦听器,等等。
使用removeEventListener删除它们或使用addEventListener('something', someCallback, { once: true })
推荐阅读
- docker - 使用KinD创建本地集群,CPU保持高使用率
- reactjs - 自定义 Redux 撤消 reducer 状态变量无法识别
- python - 使用 Matplotlib 在 Python 中跳过某些值
- digital-signature - 作为会话标识符的加密签名计数器
- vb.net - 在 VB 中运行 .bat 文件
- python - Python pandas如何在一直存储密钥的同时进行分组
- javascript - 单击时出现错误的模式弹出窗口(html、css、js)
- reactjs - 从 reducer 设置 useEffect 中的变量值
- python - 无法使用 python selenium webdriver 切换到新页面?
- oracle - 外部表帮助 - 如果字段中的值中存在附加逗号,则 FIELDS TERMINATED BY ',' 出现问题