news 2026/5/13 11:07:20

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/5/12 18:27:46

基于Matlab的车牌识别系统:模板匹配与神经网络的探索

基于matlab的车牌识别系统&#xff0c;可以用模板匹配设计也可以用网络神经算法&#xff0c;全网最全资料在智能交通日益发展的今天&#xff0c;车牌识别系统成为了一个热门的研究与应用领域。Matlab以其强大的矩阵运算能力和丰富的工具箱&#xff0c;为我们实现车牌识别系统提…

作者头像 李华
网站建设 2026/5/7 10:19:19

Wan2.2-T2V-A5B详解:轻量化设计背后的模型蒸馏技术解析

Wan2.2-T2V-A5B详解&#xff1a;轻量化设计背后的模型蒸馏技术解析 1. 技术背景与问题提出 近年来&#xff0c;文本到视频&#xff08;Text-to-Video, T2V&#xff09;生成技术在内容创作、广告设计和影视预演等领域展现出巨大潜力。然而&#xff0c;主流T2V模型通常参数量庞…

作者头像 李华
网站建设 2026/5/11 19:21:19

S7-200自由口协议实现英威腾GD200变频器控制与数据读取

S7-200自由口协议&#xff0c;带详细注释&#xff0c;本例以自由口通讯控制英威腾GD200变频器启停及其读取变频反馈数据在自动化控制领域&#xff0c;实现PLC与变频器的有效通讯至关重要。今天咱就来讲讲如何利用S7-200的自由口协议来控制英威腾GD200变频器的启停&#xff0c;并…

作者头像 李华
网站建设 2026/4/25 4:26:43

VibeThinker-1.5B-WEBUI部署实战:边缘设备轻量化适配可能性探讨

VibeThinker-1.5B-WEBUI部署实战&#xff1a;边缘设备轻量化适配可能性探讨 1. 引言&#xff1a;小参数模型的推理潜力与落地挑战 随着大模型技术的持续演进&#xff0c;行业关注点正从“更大”向“更高效”转移。在这一趋势下&#xff0c;微博开源的 VibeThinker-1.5B 模型以…

作者头像 李华
网站建设 2026/4/25 15:47:39

基于ssm的学校社团管理系统设计与实现3rz25768(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表开题报告内容基于SSM的学校社团管理系统设计与实现开题报告一、选题背景与意义&#xff08;一&#xff09;选题背景随着高校教育改革的不断深入和学生综合素质培养需求的提升&#xff0c;学校社团作为学生课外活动的重要载体&#xff0c;其数量与规模日益扩大。…

作者头像 李华
网站建设 2026/5/7 3:17:22

C++中虚函数调用慢5倍?深入理解vtable和性能开销

“虚函数调用有性能开销”&#xff0c;这句话你肯定听过&#xff0c;但到底慢多少、为什么慢、什么时候需要担心&#xff0c;这些问题很多人其实说不清楚。 虚函数调用大约需要24个时钟周期&#xff0c;而普通函数调用只需要4.2个周期&#xff0c;粗略算下来&#xff0c;慢了将…

作者头像 李华