出现Uncaughtjavascript:void(0); TypeError: sidebar.value.contains is not a function at HTMLDocument.

详细报错为:

Uncaught TypeError: sidebar.value.contains is not a function at HTMLDocument.checkIfOutsideClick (header.vue:134:39)

点击除你这个元素外的任何地方,未能将元素隐藏的BUG

原来代码:

const sidebar = ref(null); // 使用 ref 创建一个引用
const closeSidebarOnClickOutside = (event) => {
  // 点击事件发生在侧边栏之外时,关闭侧边栏

  if (sidebar.value && !sidebar.value.contains(event.target)) {
    showSidebar.value = false;
  }
};

onMounted(() => {
  // 在组件挂载后,监听整个页面的点击事件
  document.addEventListener("click", closeSidebarOnClickOutside);
});

onBeforeUnmount(() => {
  // 在组件销毁前,移除点击事件监听器
  document.removeEventListener("click", closeSidebarOnClickOutside);
});

其实换种方法,用js原生获取dom类型的方法就可以了

改为:

let sidebarElement; // Variable to hold the sidebar DOM element

const checkIfOutsideClick = (event) => {
  // Check if the click was outside the sidebar element
  if (sidebarElement && !sidebarElement.contains(event.target)) {
    showSidebar.value = false; // Close the sidebar if click is outside
  }
};

onMounted(() => {
  // Select the sidebar element using its class or id
  sidebarElement = document.querySelector('.sidebar_'); // Adjust the selector as needed

  // Listen for clicks on the entire document
  document.addEventListener('click', checkIfOutsideClick, true);
});

onBeforeUnmount(() => {
  // Remove the event listener when the component is unmounted
  document.removeEventListener('click', checkIfOutsideClick, true);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值