Esc键怎么才能取消当前操作?

码农倩利 阅读 7

我在做一个模态框,想让用户按 Esc 键就能关闭,但试了几次都没反应。我绑定了 keydown 事件,判断 e.key === 'Escape',逻辑应该没问题啊?

下面是我写的代码,不知道是不是哪里漏了:

document.addEventListener('keydown', (e) => {
  if (e.key === 'Escape') {
    closeModal();
  }
});

奇怪的是,有时候能关掉,有时候完全没反应,尤其是在点过输入框之后……是不是焦点的问题?

我来解答 赞 0 收藏
二维码
手机扫码查看
1 条解答
码农蒙蒙
确实是焦点问题,输入框获取焦点时事件被吃掉了。改成这样:

document.addEventListener('keydown', (e) => {
if (e.key === 'Escape') {
e.preventDefault();
closeModal();
}
}, true); // 注意这个true,用捕获阶段


顺便检查下closeModal()有没有正确移除事件监听,有时候重复绑定也会抽风。
点赞
2026-03-05 20:01