news 2026/5/1 6:12:35

el-drawer注册全局点击事件无效;el-dialog注册全局点击事件无效

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
el-drawer注册全局点击事件无效;el-dialog注册全局点击事件无效

提示:el-drawer或el-dialog注册全局点击事件无效,即抽屉或弹框外点击会触发事件,但抽屉和弹框内点击无反应

目前通过方案2:使用捕获阶段(推荐)解决


文章目录

    • 解决方案
      • 方案1:将事件监听器改为 `document`
      • 方案2:使用捕获阶段(推荐)
      • 方案3:检查事件路径
      • 方案4:针对 el-drawer 的特殊处理
      • 方案5:使用 Vue 的自定义事件(如果 drawer 是子组件)
    • 调试建议

这是因为事件冒泡被阻止了。el-drawer组件内部的事件默认不会冒泡到window,这可能是因为:

  1. el-drawer阻止了事件冒泡(事件修饰符.stop
  2. 事件目标被判断为不在window
  3. el-drawer的层叠上下文导致事件被拦截

解决方案

方案1:将事件监听器改为document

onMounted(()=>{document.addEventListener("click",clearFlag)})onBeforeUnmount(()=>{document.removeEventListener("click",clearFlag)})

方案2:使用捕获阶段(推荐)

onMounted(()=>{document.addEventListener("click",clearFlag,true)// 第三个参数 true 表示捕获阶段})onBeforeUnmount(()=>{document.removeEventListener("click",clearFlag,true)})

方案3:检查事件路径

如果上面的方法无效,可以检查事件是否被阻止:

constclearFlag=(event)=>{console.log('事件触发',event.target)console.log('事件路径',event.composedPath())// 检查是否被阻止console.log('defaultPrevented',event.defaultPrevented)}

方案4:针对 el-drawer 的特殊处理

import{nextTick}from'vue'onMounted(()=>{nextTick(()=>{// 获取 drawer 的 DOMconstdrawer=document.querySelector('.el-drawer')if(drawer){drawer.addEventListener('click',clearFlag)}// 同时监听 document 作为后备document.addEventListener('click',clearFlag)})})onBeforeUnmount(()=>{constdrawer=document.querySelector('.el-drawer')if(drawer){drawer.removeEventListener('click',clearFlag)}document.removeEventListener('click',clearFlag)})

方案5:使用 Vue 的自定义事件(如果 drawer 是子组件)

<!-- 父组件 --> <template> <ChildDrawer @drawer-click="clearFlag" /> </template> <!-- 子组件 drawer 内部 --> <template> <el-drawer> <div @click="$emit('drawer-click')"> <!-- 内容 --> </div> </el-drawer> </template>

调试建议

constclearFlag=(event)=>{console.log('事件触发',{target:event.target,currentTarget:event.currentTarget,eventPhase:event.eventPhase,// 1: 捕获, 2: 目标, 3: 冒泡bubbles:event.bubbles,// 是否冒泡defaultPrevented:event.defaultPrevented,composed:event.composed,// 是否能跨越 Shadow DOM})}

推荐先用方案1或方案2,大多数情况下将window改为document并使用捕获阶段就能解决问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 23:13:51

Z-Image-Turbo + Gradio:打造你的在线AI绘画网站

Z-Image-Turbo Gradio&#xff1a;打造你的在线AI绘画网站 1. 背景与应用场景 随着生成式AI技术的快速发展&#xff0c;文生图&#xff08;Text-to-Image&#xff09;模型在艺术创作、设计辅助和内容生产等领域展现出巨大潜力。然而&#xff0c;许多开源模型存在生成速度慢、…

作者头像 李华
网站建设 2026/5/1 6:11:58

台达触摸屏MODBUS直连台达变频器通讯程序:开启自动化控制新视野

台达触摸屏MODBUS直接与台达变频器通讯程序 Modbus rtu台达摸屏直接与台达变频器通讯, 实现启动, 原作 是程序 是程序 是程序,不是实物,虚拟产品,售出不退,拍前请看清楚 停止, 正反转, 频率设定, 实时输出功能监控, 这是触摸屏程序,不要经过PLC与变频器通信,介面漂亮,可用于…

作者头像 李华
网站建设 2026/5/1 6:12:32

Java全栈开发面试实录:从基础到项目实战

Java全栈开发面试实录&#xff1a;从基础到项目实战 一、开场白 面试官&#xff1a;你好&#xff0c;我是今天的面试官&#xff0c;负责技术方向的考察。很高兴你来参加我们公司的面试&#xff0c;先做个自我介绍吧。 应聘者&#xff1a;您好&#xff0c;我叫李明&#xff0c;2…

作者头像 李华
网站建设 2026/4/25 5:19:05

leetcode二分法

二分法力扣704题目&#xff1a;给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果 target 存在返回下标&#xff0c;否则返回 -1。你必须编写一个具有 O(log n) 时间复杂度…

作者头像 李华
网站建设 2026/4/9 15:54:06

保护儿童视力,有些“雷区”不能踩!

‍  儿童近视率持续攀升&#xff0c;视力健康问题已成为社会关注的焦点。很多家长怀揣着守护孩子视力的初心&#xff0c;却在日常护眼过程中不知不觉踩中诸多“雷区”&#xff0c;不仅未能起到保护效果&#xff0c;反而可能加重孩子的视力负担。想要科学守护孩子的清晰视界&a…

作者头像 李华