键盘测试
测试键盘按键功能,实时显示按键状态和键值信息
按键记录
什么是键盘测试?
键盘测试用于确认按键事件是否真正到达浏览器,并查看浏览器如何描述每一次按键。它适合排查按键失灵、卡键、快捷键无效、笔记本键盘进水后异常、新机械键盘到手后的基础检查等问题。工具会显示 key、code、历史 keyCode、按键位置、是否重复触发,以及 Ctrl、Shift、Alt、Meta 等修饰键状态。通过这些信息,可以区分硬件问题、键盘布局差异和软件拦截:同一个物理按键在不同布局下可能输入不同字符。需要注意,Ctrl+Alt+Del、Alt+Tab 等系统级快捷键通常不会被网页捕获,看不到事件不一定代表键盘坏了。
使用方法
如何使用
- 将鼠标焦点放在测试区域
- 按下键盘上的任意键
- 观察按键高亮显示和信息面板
- 在下方查看按键历史
提示
- 绿色高亮表示按键工作正常
- 所有标准键盘按键均可测试
- 支持检测修饰键(Ctrl、Shift、Alt、Meta)
- 重复按键会在信息面板中标记
使用场景
技术原理
浏览器通过 KeyboardEvent 接口暴露键盘事件:每次按键触发 keydown 和 keyup 事件。KeyboardEvent 携带几个关键属性:key 是按键的字符值(受布局和 Shift 状态影响——例如 a 与 A);code 是物理位置标识(与布局无关——在 QWERTY 和 AZERTY 上 KeyA 都是 KeyA);keyCode 是遗留的数字值(已弃用但仍出现在旧代码中);location 表示按键位置(0 标准、1 左侧、2 右侧、3 数字键盘)。要检测组合键,需监听 ctrlKey、shiftKey、altKey、metaKey 四个布尔修饰键标志——例如 Ctrl+C 时 ctrlKey=true 且 key='c'。触发顺序为 keydown -> keypress(已弃用)-> keyup;按住按键时 keydown 持续触发且 event.repeat=true。游戏开发偏好使用 code(不受玩家切换布局影响),而输入框场景偏好使用 key(返回实际字符)。N-key rollover (NKRO) 指键盘硬件可以同时注册任意数量的按键;普通 USB 键盘受 USB HID 协议限制为 6KRO——同时按住超过 6 个键开始丢弃事件。PS/2 接口或带专用驱动的机械键盘可以实现真正的 NKRO。
- KeyboardEvent.key 是字符值('a'/'A'/'Enter'),受布局和 Shift 影响——在输入框场景中使用。
- KeyboardEvent.code 是物理位置标识('KeyA'/'Digit1'),与布局无关——用于游戏和快捷键绑定。
- location 值:0 标准、1 左侧修饰键、2 右侧修饰键、3 数字键盘——用于区分左右 Shift、Ctrl、Alt 时非常有用。
- 组合键:ctrlKey/shiftKey/altKey/metaKey 是四个布尔值,表示修饰键状态;与 key 组合即可检测 Ctrl+C、Cmd+Shift+P 等。
- event.repeat=true 表示按住的键正在自动重复;在长按测试中,用此标志过滤重复事件。
- 6KRO 与 NKRO:6 键无冲是 USB HID 协议限制;机械键盘可通过 PS/2 或专用驱动实现 N-key rollover (NKRO)。
示例
按下字母键
按下 A -> key: "a", code: "KeyA", keyCode: 65, location: 0(标准位置)按下功能键
按下 F1 -> key: "F1", code: "F1", keyCode: 112, location: 0按下组合键
按下 Ctrl+C -> 检测到 Ctrl (code: "ControlLeft", location: 1) + C (code: "KeyC", ctrlKey: true)常见问题
测试可以检测哪些按键?
几乎所有浏览器能收到 keydown 事件的物理按键:字母数字、修饰键(Shift/Ctrl/Alt/Meta)、方向键、F1-F24 功能键、数字小键盘,以及部分浏览器支持的多媒体键(音量、播放控制)等。每按下一个键,屏幕键盘上对应位置就会变绿,便于发现失灵的键位。
为什么我的 Fn 键没反应?
在大多数笔记本上,Fn 由固件层处理,不会产生 JavaScript 键盘事件——这是正常现象,并非故障。功能行组合键(如 Fn+F5)通常只产生功能动作(如调高音量)而没有键码。请使用台式键盘或外接键盘测试这些键。
可以检测卡键或抖键吗?
可以。按一次按键,观察会触发多少个 keydown 事件。开关抖动会在毫秒级别产生多个事件。部分版本可列出原始事件时间戳,让抖键现象一目了然。
key、code 和 keyCode 有什么区别?
key 是按键的「值」("a"、"Shift"、"Enter");code 是物理位置标识("KeyA"、"ShiftLeft"),与键盘布局无关;keyCode 是已废弃的数字 ID(仍为兼容而保留)。要识别物理按键且不受语言布局影响,请使用 code。
可以测试无冲突按键(NKRO)吗?
部分支持。本页会显示当前按下的按键,你可以同时按多个键看能识别多少。USB HID 与 PS/2 键盘的鬼键限制不同;这里测试的是 Web 端真实表现,但若做硬核测量,专门的工具(如 Aqua's KeyTest、Switch Hitter)更权威。
死键和输入法组合会被识别吗?
输入法(中文、日文、韩文)在组词期间通常会屏蔽底层键事件。请关闭输入法、切换到直接输入模式来测试单个按键。死键(欧洲键盘上的尖音符、变音符等)会先触发 Dead,然后与下一个按键合成。
数据会发送到服务器吗?
不会。键盘事件全部在浏览器本地处理,不会被记录或传输。