HandyTools Hub

键码查询

按下任意键,查看其 JavaScript 键盘事件值

请按任意键

—

event.code —
event.which (已废弃) —
event.keyCode (已废弃) —
修饰键
Ctrl Shift Alt Meta

常见按键参考表

按键 代码 keyCode 描述

按下任意键,立即看到浏览器报告的全部信息:event.key、event.code、传统的 event.which 和 event.keyCode 数值,以及按下时持有的修饰键(Ctrl、Shift、Alt、Meta)。实时显示下方是一张可搜索的参考表,列出字母、数字、功能键、方向键等的 key、code 和旧版 keyCode 值。捕获在页面内本地进行,按键只从事件对象读取,不会被记录或发送到任何地方。

如何解读实时显示

点击页面让它获得焦点,然后按下任意键。大面板显示 event.key——该键产生的值。下方三张卡片分别拆解 event.code(物理按键)、event.which 和 event.keyCode。四个徽标分别对应 Ctrl、Shift、Alt、Meta,在该次按键对应的修饰标志为真时亮起。

试几组刻意的组合,观察数值如何分道扬镳。先按 a 再按 Shift+A:key 从 a 变成 A,但 code 始终是 KeyA,keyCode 始终是 65。按空格键时 event.key 是一个空格字符而不是单词 “Space”,而 event.code 是 Space,keyCode 是 32。这让你在编写分支逻辑前就能确认处理器究竟会收到什么。

event.key、event.code 与 keyCode

现代代码在关心含义时(“用户是否按了 Enter?“)应基于 event.key 分支,关心物理位置时(“WASD 键位,无论什么布局”)应基于 event.code。数值型的 keyCode 和 which 已废弃,但仍出现在旧库和老答案里,所以本工具把它们并排展示。

对于可打印字符,keyCode 反映未按 Shift 时的大写值:a 和 Shift+A 都报告 65,1 和 Shift+1 都报告 49,尽管后者产生的是 !。event.key 给出精确字符,是文本录入的正确选择;event.code 完全忽略 Shift 和布局,因此是国际键盘上游戏控件的安全选择。

实操示例:接入 Ctrl+K 快捷键

假设你想做一个”命令面板”热键。按住 Ctrl 再按 k,显示如下:

属性值
event.keyk
event.codeKeyK
event.keyCode / which75
event.ctrlKeytrue

像 if (e.ctrlKey && e.key === 'k') { openPalette(); } 这样的处理器能够匹配,而 keyCode 卡片会在你需要兼容旧库时确认传统值 75。再比较 WASD 移动方案:在 AZERTY 键盘上,标着 Z 的键位于美式 W 的位置,于是 event.key 变成 z,而 event.code 仍报告 KeyW。基于 event.code 分支能让移动在各布局下保持一致,基于 event.key 则不行。

功能键遵循同样的规律:F1 的 code 是 F1、keyCode 是 112,依次到 F12 的 123。方向键的 code 是 ArrowUp(38)、ArrowDown(40)、ArrowLeft(37)、ArrowRight(39)。

该读哪个属性

任务读取原因
文本输入或校验event.key给出精确字符,包括 Shift 和死键结果
游戏移动或与布局无关的快捷键event.code跟踪物理位置,与键盘布局无关
迁移旧代码event.keyCode匹配旧库仍然期望的数字
检测与另一键同按的修饰键event.ctrlKey、event.shiftKey、event.altKey、event.metaKey在 keydown 事件本身上报告状态

稳健的快捷键往往两者结合:用 event.code 判断物理按键、用修饰标志判断组合,而不是对 event.key 做字符串匹配。

常见错误

  • 用 keyCode 做文本输入。 它无法区分 a 和 A、1 和 !,校验和字符处理会出错。
  • 用 event.key 做游戏控件。 布局和 Shift 会改变它的值,同一个物理键在非美式键盘上就失灵。
  • 以为修饰键本身有可打印值。 单独按 Shift 时 key 报告为 Shift;真正有用的信号是下一次按键上的 shiftKey 标志。
  • 忘记调用 preventDefault。 对 Tab 或空格这类键,浏览器的默认行为仍会执行,可能滚动页面或移动焦点,除非你阻止它。
  • 期待保留快捷键会送达。 Ctrl+W、Ctrl+T、Alt+Tab 和 F12 由浏览器或操作系统处理,永远不会到达你的监听器。

参考表覆盖哪些内容

实时显示下方的可搜索表格列出美式布局下的取值:字母 A–Z、数字 0–9、功能键 F1–F12、方向与导航键、Enter 和 Backspace 等编辑键、修饰与锁定键、常见标点以及完整小键盘。每一行都带一句通俗描述,搜索框可匹配 key、code、描述或类别——输入 numpad、arrow 或 F5 即可筛选。当你要查一个此刻按不出来的键(例如笔记本键盘上缺失的键)时,它就是备用方案。搜索 letter 会返回全部 26 个字母行,punctuation 会返回方括号、引号和斜杠键及其 code,KeyA 会返回 A 键那一行,keyCode 为 65。

相关工具

常见问题

为什么按 Shift+A 时 key 报告为 A,而 keyCode 是 65?

event.key 反映按键产生的字符,所以 Shift+A 给出大写 A,而单按 a 给出小写 a。对可打印键而言,传统的 keyCode 与布局和 Shift 无关:a 和 Shift+A 都报告 65。这正是 keyCode 不适合字符输入的原因。

event.which 和 event.keyCode 有什么区别?

在现代浏览器里,键盘事件上两者返回相同的数字——which 是 keyCode 的传统别名——本工具把两者并排显示以便确认。它们都没有为新代码标准化;请优先用 event.key 表达含义、用 event.code 表达物理位置。

为什么工具捕获不到 Alt+Tab 或 Ctrl+W?

操作系统和浏览器级别的快捷键永远不会到达页面。Alt+Tab 被系统截获,Ctrl+W 在任何脚本看到事件之前就把标签页关掉了。实时显示只呈现浏览器实际送达的按键,所以有些组合看起来毫无反应。

如何把 Windows 或 Command 键作为修饰键检测?

检查 event.metaKey。PC 上的 Windows 键或 macOS 上的 Command 键被按住时它为真。物理键本身报告 event.code 为 MetaLeft(91)或 MetaRight(92),与其他键同按时实时显示区的 Meta 徽标会亮起。

为什么小键盘 Enter 的 code 和主键盘 Enter 不同?

它们是不同的物理按键,所以 event.code 用 NumpadEnter 和 Enter 加以区分,尽管两者都产生 event.key 的 Enter 和 keyCode 13。如果你的快捷键要对两者都响应,请基于 event.key 分支而不是 event.code。

页面能捕获我在其他标签页或应用里输入的按键吗?

不能。监听器只在工具页面获得焦点时触发,按键从页面内的键盘事件读取,不会被存储或传输。切换到其他标签页或应用后,捕获随即停止。

由 HandyTools Hub 团队审校 · 最后更新