.addEventListener 抛出 TypeError [重复]

Posted

技术标签:

【中文标题】.addEventListener 抛出 TypeError [重复]【英文标题】:.addEventListener throwing TypeError [duplicate] 【发布时间】:2020-02-12 15:53:39 【问题描述】:

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

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

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)

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于.addEventListener 抛出 TypeError [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用addEventListener添加事件

attachEvent和addEventListener区别

Javascript 的addEventListener()及attachEvent()区别分析

js addeventlistener 怎么传参数

addEventListener

dom js