首页 > 解决方案 > 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') {

  }
}

标签: javascriptaddeventlistener

解决方案


您正在调用addEventListener类似于window.addEventListener,因此您将 9 个事件处理程序附加到该window对象。在任何地方单击都会触发所有这些。

您需要将事件侦听器添加到框中。

elem => elem.addEventListener

推荐阅读