JavaScript 键码探查器

在浏览器中按任意键,即时查看 event.key、event.code、keyCode、charCode、location、repeat 与修饰键状态,并复制现成的 JS 判断片段。在浏览器中处理,零配置。

  • 在浏览器中处理
  • 数据不离开你的设备
  • 免费 · 无需注册
「复制」复制结果区显示的完整 JS 代码片段。 「清除」重置事件字段、计数、历史、修饰键指示器与代码片段。焦点在工具内其他位置时,Ctrl/⌘+L 清空;焦点在捕获区时,会将这个快捷键作为按键捕获。
按键捕获区 点击捕获区后按键;首次载入也会自动聚焦。区域内会阻止 Tab、空格、退格、方向键和 F1–F12 的默认操作;部分浏览器或系统快捷键不会传到页面。
点击此处,然后按任意键
⌨
0 次按键

事件属性

显示最近一次 keydown 的原始 key、物理 code、旧 keyCode/which/charCode、location、repeat 和 isComposing 值;旧数字属性已弃用。
event.key —
event.code —
keyCode (已废弃) —
which (已废弃) —
charCode (已废弃) —
location —
repeat —
isComposing —

修饰键

Shift、Ctrl、Alt、Meta 指示器显示最近一次捕获的 keydown 中的修饰键状态,下次捕获按键时更新。
Shift Ctrl Alt Meta

可复制的 JS 代码片段

代码片段匹配 event.key 及捕获的修饰键,每次捕获后立即更新,不使用 event.code。

最近按键

「最近按键」保留最近八次捕获,最新的在前。捕获区计数包含自上次「清除」以来的全部捕获。
阅读完整使用指南 为什么 event.keyCode 在骗你:现代 JavaScript 键盘事件指南
示例、说明与常见问题 带实际输出的示例、与同类工具的差别,以及常见问题。

event.key、event.code 与 keyCode 对照

前端键盘逻辑 bug 大多来自混用这三个属性。对照表如下:

属性受布局影响推荐使用QWERTY 按 A 时的取值
event.key是(反映当前布局)推荐——语义判断”a” 或按 Shift 时 “A”
event.code否(物理位置)推荐——游戏/快捷键绑定”KeyA”
keyCode否不推荐——已弃用65
which否不推荐——已弃用65
charCode否不推荐——keydown 时恒为 00

常见用途

  • 调试键盘事件处理——把 event.key 实际值粘到 if 条件里,排查拼写错误。
  • 实现游戏控制——优先用 event.code,让 AZERTY 布局也能用 WASD 走位。
  • 命令面板快捷键——组合 event.key 与 e.ctrlKey / e.metaKey。
  • 审计遗留代码——读出 keyCode / which,把老代码迁移到 event.key。
  • 识别 IME 输入——e.isComposing = true 表示中文/日文输入法正在组字,单键处理器应直接返回。

关于 preventDefault

捕获区域仅对 Tab、Space、Backspace、方向键、F1-F12 调用 preventDefault()——这些是浏览器会消费的导航/页面键。 Ctrl+W / Cmd+Q 等系统级快捷键不拦截,保持浏览器默认行为。

键盘布局与输入法

event.code 按美式键盘上的位置命名物理按键。UI Events KeyboardEvent code Values 规范写明 “KeyQ” 是美式键盘上标 q、法语 AZERTY 键盘上标 a 的那个键。所以在 AZERTY 键盘上输入 a,得到 key: “a” 和 code: “KeyQ”。与按键位置有关的快捷键(WASD 移动)用 code,与按键输入的字符有关的快捷键(Ctrl+Z 撤销)用 key。

输入法正在组字时,UI Events 规定 keydown 的 keyCode 为 229,事件的 isComposing 为 true。处理 Enter 之前先检查 isComposing,否则用拼音输入法按回车确认候选词时也会提交表单。

限制

  • 手机和平板的软键盘通常只发送带有输入文字的 input 事件,而不是完整的 keydown。键盘区下方的降级输入框把这段文字显示为 key,code、keyCode、which、charCode 留空,因为 input 事件不说明按的是哪个键。
  • Ctrl+W、Cmd+Q 等快捷键由浏览器和操作系统处理,页面收不到。

FAQ

event.key、event.code 和 keyCode 有什么区别?

event.key 是应用键盘布局后的可读字符或键名(例如 Dvorak 布局下按物理 A 位置得到的 event.key 可能是 'a');event.code 是基于美式 QWERTY 的物理按键位置(KeyA、Digit1、ArrowUp),不随布局变化;keyCode 是早期的数字键码(A 为 65),已被标准弃用,浏览器仅为向后兼容保留。

为什么 keyCode、which 和 charCode 都已弃用?

这三个属性在不同浏览器之间不一致,对非拉丁布局也不可靠。现代代码应使用 event.key(语义判断)或 event.code(物理位置)。MDN 把 keyCode 与 charCode 标为「deprecated, not recommended for production」,但主流浏览器仍因兼容性继续发出这些字段——本工具原样展示,方便你审计老代码。

如何判断 Shift / Ctrl / Alt / Meta 修饰键?

直接读 KeyboardEvent 上的 e.shiftKey、e.ctrlKey、e.altKey、e.metaKey 即可,每个都是 boolean。注意 e.metaKey 在 Windows 上对应 Win 键,在 Mac 上对应 Command 键。本页生成的代码片段会根据当前修饰键状态自动组装判断条件。

移动端能用吗?

移动端物理键盘事件在各平台不一致——许多软键盘不会逐字符触发 keydown,只会发出一个 input 事件返回最终字符串。本工具按桌面浏览器设计,物理键盘信号在桌面端最完整。移动端提供一个降级单字符输入框只能读到部分信息,要完整调试事件属性请使用桌面浏览器。设计上不模拟移动端 keydown。

按键数据会发送到服务器吗?

不会。所有事件处理都通过浏览器原生 KeyboardEvent API 在本地完成,你按下的内容不会离开设备。可在 DevTools → Network 中验证。