定义全局键盘监听事件,el-dialog中删除不可用

场景:全局的div增加了鼠标监听事件,而且window中添加了键盘监听事件。

window.addEventListener('keydown', this.handleKeydown)

window.addEventListener('keyup', this.handleKeyup)

事件冒泡,导致阻止无效。

1、在 el-dialog 上同时阻止默认行为和冒泡

javascript 复制代码
<el-dialog
  @keydown.stop.prevent
  // ... other props ...
>
  // ... dialog content ...
</el-dialog>

在el-dialog上添加 @keydown.stop.prevent。可能会导致全部键盘不可用。

2、在 dialog 内部的输入元素上直接处理

javascript 复制代码
<el-dialog>
  <el-input
    @keydown.stop.prevent.native
    // ... other props ...
  />
  // ... other content ...
</el-dialog>

3、在全局键盘事件处理器中添加判断,忽略来自 dialog 的事件

javascript 复制代码
// 全局键盘事件处理器
handleKeyDown(event) {
  // 检查事件源是否在 dialog 内
  const isInDialog = event.target.closest('.el-dialog');
  if (isInDialog) {
    return; // 如果在 dialog 内,直接返回不处理
  }
  
  // 原有的键盘事件处理逻辑
  // ... existing code ...
}

亲测有效!!!

4、使用 v-if 条件来控制全局键盘事件的监听

javascript 复制代码
// 在组件中添加一个控制变量
data() {
  return {
    isDialogVisible: false,
    // ... other data
  }
}

// 在模板中
<div 
  @keydown="isDialogVisible ? null : handleKeyDown"
  // ... other attributes
>
  <el-dialog
    v-model="isDialogVisible"
    // ... other props
  >
    // ... dialog content ...
  </el-dialog>
</div>
相关推荐
不简说1 分钟前
JS 代码技巧 vol.1 — 10 个让代码少写 30% 的小套路
前端·javascript·面试
@@@@@@@@544 分钟前
JavaScript 的缺点与 TypeScript 的弥补
开发语言·javascript·typescript
Hilaku5 分钟前
为什么业务型前端容易遭遇中年危机?
前端·javascript·程序员
এ慕ོ冬℘゜14 分钟前
深度解析 JavaScript:赋予 Web 灵魂的“全栈语言”
开发语言·前端·javascript
HackTwoHub35 分钟前
AntiDebug Mcp、AI逆向绕过前端,Hook 加密接口,抓取 Vue 路由漏洞,接入 MCP 让 AI 自动化挖掘前端漏洞
前端·vue.js·人工智能·安全·web安全·网络安全·系统安全
铁皮饭盒1 小时前
Bun 处理 IO 密集型比 Java 强多少?
javascript
李明卫杭州1 小时前
还在用 Vue2 的 $set?一文吃透 Observable 响应式原理与 Vue3 的 Proxy 重构
vue.js
anod1 小时前
Amazon反爬虫:一场从自动化到Chrome插件的折腾之旅
javascript·chrome·amazon·插件
英勇无比的消炎药1 小时前
层级选择不再手写联动:TinyVue Cascader 级联选择器上手
vue.js
摇滚侠2 小时前
SpringBoot3+Vue3 全套视频教程 61
vue.js