【问题标题】:.addEventListener throwing TypeError [duplicate].addEventListener 抛出 TypeError [重复]
【发布时间】:2023-03-14 16:35:01
【问题描述】:

我正在设置一个功能,当在外部单击时会关闭下拉菜单。该函数按预期工作,但会引发错误。

考虑到该功能按预期工作,我不确定是什么导致了错误。

const userBtn = document.querySelector(".header-userbtn");
const userMenu = document.querySelector(".header-usermenu");

function hideOnClickOutside(element, button) {
  if (!element.classList.contains("active")) {
    return false;
  }
  const outsideClickListener = event => {
    if (!element.contains(event.target)) {
      button.click();
      removeClickListener();
    }
  };

  const removeClickListener = () => {
    document.removeEventListener("click", outsideClickListener);
  };

  document.addEventListener("click", outsideClickListener);
}

userBtn.addEventListener("click", function(e) {
  const chevron = this.querySelector(".chevron-wht");

  this.classList.toggle("active");
  chevron.classList.toggle("active");
  userMenu.classList.toggle("active");

  e.stopPropagation();
  document.addEventListener(             /*main.js:31 */
    "click",
    hideOnClickOutside(userMenu, userBtn));
});

这是错误消息。每次菜单关闭时触发,点击事件调用该函数。

main.js:31 Uncaught TypeError: Failed to execute 'addEventListener' on 'EventTarget': The callback provided as parameter 2 is not an object.
    at HTMLButtonElement.<anonymous> (main.js:31)

【问题讨论】:

    标签: javascript


    【解决方案1】:

    您当前没有为您指定的事件侦听器提供回调函数...

    document.addEventListener(
        "click",
        function() { hideOnClickOutside(userMenu, userBtn); }
     );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-03
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2021-10-07
      • 2018-08-28
      相关资源
      最近更新 更多