当前位置: 首页 > news >正文

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并使用捕获阶段就能解决问题。

http://www.jsqmd.com/news/270104/

相关文章:

  • 基于Matlab的车牌识别系统:模板匹配与神经网络的探索
  • TB352XC原厂刷机包下载_CN_ZUI_17
  • Live Avatar A/B测试框架:不同参数组合效果对比实验
  • 深入剖析艾默生15kW充电桩与台达三相PFC技术
  • Wan2.2-T2V-A5B详解:轻量化设计背后的模型蒸馏技术解析
  • 搜嗖工具箱|哪些助你打开天窗的工具网站
  • STM32上进行Unix时间戳转换
  • RAG技术实战指南:让大模型读懂企业知识,LLaMA-Factory Online 赋能落地
  • 大模型在创新设计推理任务中的表现
  • 基于ssm的学校社团管理系统设计与实现3rz25768(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • GB28181: 使用ffmpeg编码h264为ps流
  • 30秒极速上手:大模型个人开发者如何零门槛使用 n1n.ai?
  • 基于SSM的个人健康系统26vxdh02(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • LLMs之MoE之Thinking:LongCat-Flash-Thinking-2601的简介、安装和使用方法、案例应用之详细攻略
  • 原则 - hacker
  • 【大数据】Apache Calcite架构:从 SQL 到执行计划的转换框架
  • Dump分析日记2
  • 【2026最新】微软常用运行库合集下载安装使用教程(附安装包+图文步骤)
  • 基于微信小程序的互助学习平台【源码+文档+调试】
  • 亚马逊店铺流量突破:从关键词优化到自养号测评的全攻略
  • maven生命周期构建和测试发布项目
  • 基于微信小程序的健身房预约系统【源码+文档+调试】
  • Linux通过自动脚本自动化推送k8s Docker镜像
  • leetcode二分法
  • TikTok广告代理商推荐:面向跨境电商与B2B出海企业的技术型服务商盘点 - 智造出海
  • 2026.1.17总结
  • windows 删除驱动
  • 【PR】音频调色
  • 垃圾有机质燃烧的热值
  • 推N返1推3返H5商城电商平台抖音快手微信小程序看广告流量主开源