为什么 keypress 事件在 Vue 里监听不到方向键?

Mr-俊鑫 阅读 10

我最近在用 Vue 做一个简单的键盘控制功能,想用 keypress 监听方向键(比如左、右箭头),但发现完全没反应。查了文档说 keypress 只对能产生字符的按键有效,那是不是意味着方向键根本不会触发 keypress?但我试过换成 keydown 就可以,只是不太确定该不该换,会不会有兼容性问题?

下面是我写的代码:

<template>
  <input @keypress="handleKeyPress" placeholder="按方向键试试" />
</template>

<script>
export default {
  methods: {
    handleKeyPress(e) {
      console.log('按下了:', e.key);
    }
  }
}
</script>
我来解答 赞 7 收藏
二维码
手机扫码查看
1 条解答
博主尚斌
我之前踩过这个坑,你的理解是对的。

keypress 监听不到方向键是正常的浏览器行为,不是 Vue 的问题。keypress 事件的设计初衷是监听能产生字符输入的按键,比如字母、数字、符号这些。方向键、Shift、Ctrl、Esc 这些功能键都不会触发 keypress。

放心换成 keydown 吧,兼容性完全没问题。keydown 是所有按键都能监听到,而且浏览器支持非常广泛,从 IE6 时代就有了,不用担心。

改成这样就行:





顺便说一句,Vue 还支持按键修饰符,写起来更简洁。比如只监听上下方向键可以这样写:@keydown.up@keydown.down,方向键对应的修饰符是 .up.down.left.right

简单总结一下就是:keypress 已经过时了,MDN 都标注为废弃状态,以后统一用 keydown 就完事了。
点赞 2
2026-03-01 05:00