javascript - addEventListener 和传递函数的问题
问题描述
我的问题是,当我单击此框之一时,功能标记是调用了 9 次。为什么会这样?我还补充说盒子有 9 个元素。
export function battle(app, mod, player) {
const newHtml = html.replace("mode", mod.toUpperCase());
app.innerHTML = newHtml;
const boxes = document.querySelectorAll('.battle div');
if (mod = 'single') {
boxes.forEach(elem => addEventListener('click', (e) => {
mark(e.target, player);
}, false));
}
if (mod = 'multi') {
}
}
解决方案
您正在调用addEventListener
类似于window.addEventListener
,因此您将 9 个事件处理程序附加到该window
对象。在任何地方单击都会触发所有这些。
您需要将事件侦听器添加到框中。
elem => elem.addEventListener
推荐阅读
- jenkins - Jenkins Slave 在“空闲延迟”超时不工作之前关闭
- gradle - 在 Heroku 成功的机器人上部署不起作用 - JDA
- javascript - 如何在 Plotly 中将图例放置在顶部而不是底部?
- excel - 带有数字结果的 Excel 下拉列表(不是文本)
- javafx - 在一行中间添加一个节点 java fx
- c# - 正则表达式在组内查找值
- node.js - Node.js - 无需 html 即可直接从浏览器下载的服务文件
- c# - INotifyDataErrorInfo ErrorsChanged 不适用于绑定到 ListCollectionView 的 UI 元素
- python-3.x - 输出保持垂直打印
- ios - 如何连接到不在 iOS 应用程序中广告服务 UUID 的 BLE 设备