JavaScript keycode 检测器,免费

按下键盘上的任意按键,查看其 JavaScript 事件属性。

按下一个按键…

JavaScript 键盘事件 30 年简史

尚未按下任何按键

工作原理

  1. 按下一个按键:点击输入区,按下任意键 · 字母、数字、功能键、方向键、修饰键或特殊键。
  2. 读取 keycode:工具立即显示按键的 event.key、event.code、event.keyCode(遗留)和 charCode 值。
  3. 在代码中使用:复制您在键盘事件监听器或快捷键实现中需要的确切值。

为什么使用 keycode 检测器?

JavaScript 的键盘事件暴露多个不同属性 · key、code、keyCode、charCode 和 which · 知道用哪一个以及比较什么值常常令人困惑。KeyCode 检测器让您按下按键即可立即看到其所有事件属性,省去猜测。构建键盘快捷键、处理特殊按键、实现热键以及调试键盘事件监听器时非常有价值。

功能特性

常见问题

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

event.key 是现代标准 · 返回「ArrowLeft」「Enter」等可读字符串。event.keyCode 是遗留的数字代码(已弃用但仍被支持)。新代码请使用 event.key;event.keyCode 用于保持对旧浏览器的兼容性。

如何检测 Ctrl+S 或其他组合键?

键盘组合结合 event.key 和修饰键检查:if (event.ctrlKey && event.key === "s")。在此工具中按下 Ctrl+S 查看所有值,然后在事件监听器中复现相同条件。

为什么有些按键显示相同的 keyCode?

keyCode 值未被规范化,某些按键在不同上下文下共享代码。event.code 更可靠 · 它标识按键的物理位置(如「KeyA」),与键盘布局无关;而 event.key 反映该键产生的字符。

JavaScript 键盘事件 30 年简史

键盘事件在 DOM 中有着臭名昭著的混乱历史。Netscape Navigator 2(1995)引入了原始的 onkeydownonkeypressonkeyup 处理器,带有一个没有规范的数字 keyCode 属性;浏览器各自发明了自己的值。Internet Explorer 4(1997)实现了自己的变体,以 event.keyCode 作为唯一属性,而 Netscape 坚持使用 event.whichDOM Level 2 Events(W3C,2000 年 11 月)标准化了事件流(捕获/冒泡),但因供应商无法达成一致,明确搁置了键盘事件。结果:开发者在十多年里写着像 e.keyCode || e.which 这样的代码。DOM Level 3 Events(W3C Working Draft 2003,Recommendation 2018)终于引入了现代的 event.key(Unicode 字符或命名键如「ArrowLeft」)和 event.code(物理键位置如「KeyA」,与布局无关),同时弃用 keyCodecharCodewhichUI Events 规范(W3C,持续中)是这项工作的现代家园。浏览器逐步赶上:Chrome 51(2016 年 5 月)、Firefox 47(2016 年 6 月)、Safari 10.1(2017 年 3 月)都发布了 event.code 支持。传统的 keypress 事件被 beforeinputinput 事件取代,已被弃用。

5 个属性,解码

键代码查找真正重要的地方

键盘事件处理中的常见错误

更多常见问题

为什么当用户使用非美国键盘时,我的键处理器不触发?

几乎总是因为你正在检查 event.key 中只在该布局上用 Shift 存在的字符。在德国 QWERTZ 键盘上,「/」是 Shift+7(不是自己的键);在法语 AZERTY 上,数字 0-9 用 Shift+上一行键入。对基于位置的快捷键使用 event.code(物理键),或对基于内容的快捷键使用 event.key(你真正想要用户刚键入的字符)。

如何在跨平台一致地处理 Cmd+K / Ctrl+K?

标准惯用法:if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") { e.preventDefault(); openPalette(); }。在 macOS 上,e.metaKey 是 Cmd 键;在 Windows/Linux 上,e.ctrlKey 是用户所期望的。接受两者。始终 preventDefault,因为浏览器在某些浏览器中将 Cmd+K 绑定到「聚焦地址栏」。添加 !e.repeat 以避免在按住键时触发。

JavaScript 能检测页面外的全局击键吗?

不,这是出于安全设计。浏览器仅为聚焦的页面或元素触发键盘事件。浏览器扩展可以使用 chrome.commands API 以更广泛的范围监听。原生应用在 Electron、Tauri 等中可以使用操作系统级别的全局钩子。银行和 2FA 应用依赖于这种隔离:恶意标签不能键盘记录你的密码管理器。

检测「刚按下」与「正在按住」的正确方法是什么?

对于切换,在 keydown 处理器中检查 !e.repeat , 第一个事件具有 repeat: false,后续自动重复事件具有 repeat: true。对于连续操作(游戏移动),在 Set 中跟踪键状态:在 keydown 上添加,在 keyup 上移除,然后在渲染循环中检查 keysHeld.has("KeyW")。这将输入与帧率解耦,并处理多个同时键(移动 + 跳跃)。

我在这里按键时,任何东西会发送到服务器吗?

不会。键事件由 JavaScript 在本地捕获并显示在此页面上,无需任何网络请求。在 DevTools 中打开 Network 标签,尽情打字;你会看到零出站流量。对于在任何上下文中测试都是安全的,包括发现密码或敏感快捷键在你的键盘上产生什么。

相关工具