定义全局键盘监听事件,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>
相关推荐
冬奇Lab7 小时前
AI Workflow 定义的四次演进:从 Markdown 到 JS 脚本,再到分布式多 Agent
javascript·人工智能·agent
一颗烂土豆13 小时前
Meshopt 压缩深度解析,为什么它比 Draco 更快
前端·javascript·webgl
kyriewen15 小时前
同事每天催我 Code Review,我写了个脚本让 AI 替我 review PR——现在他反过来催 AI 了
前端·javascript·ai编程
weedsfly18 小时前
迭代器、生成器与异步迭代——让数据“按需流动”的艺术
前端·javascript
假如让我当三天老蒯18 小时前
前端跨域解决方案(学习用)
前端·javascript·面试
铁皮饭盒20 小时前
Bun 哪比 Node.js 快?
javascript·后端
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
candyTong1 天前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
_柳青杨1 天前
深入理解 JavaScript 事件循环
前端·javascript
大家的林语冰2 天前
ES5 凉凉,Babel 8 正式发布,默认不再编译为 ES5 和 CJS......
前端·javascript·前端工程化