键盘键码查询

键盘键码查询,是指按下任意一个键就实时看到这次按键的 KeyboardEvent 字段:event.key(字符或含义)、event.code(物理键位)、已废弃的 keyCode 与 which、按键位置 location 与修饰键状态。本工具另带全量键码对照表、数字键码反查、三种事件字段对照和一键生成的组合键判断代码。全程浏览器本地运行,只显示不记录、不外发按键内容,免费无需注册。

示例:按任意键替换焦点在搜索框时不抓按键,想抓某个键请先点上方的捕获区再按。
EnterEnterkeyCode 13

要字符就写 e.key === 'Enter',要物理键位就写 e.code === 'Enter'; 老写法 e.keyCode === 13 // 已废弃

  • 提示keyCode 与 which 都已废弃,新代码请用 event.key(要字符)或 event.code(要物理键位)。
  • 提示keyCode 13 同时对应主回车与小键盘回车,靠 code(Enter 与 NumpadEnter)或 location(0 与 3)才分得开。
空格、方向键等会滚动页面。打开「阻止默认行为」就能安心逐键测试(Tab 除外,拦它会让键盘用户走不出这个区域)。

这一次按键的 14 个字段

event.type只读参考
keydown
这次事件本身的类型:keydown、keypress 还是 keyup。
event.key现代 · 推荐
Enter
这次按键代表的字符或含义,受布局、输入语言与 Shift 影响。
event.code现代 · 推荐
Enter
物理键位,与键帽字符、布局、输入法都无关,按下的位置决定它。
event.keyCode已废弃
13
已废弃的数字键码,同一个数字可能对应多个物理键。
event.which已废弃
13
keyCode 的别名,同样已废弃;jQuery 时代把它当作归一化入口。
event.charCode已废弃
0
已废弃的字符码,只在 keypress 上有意义,其余事件恒为 0。
event.location只读参考
0(标准)
按键位置:0 标准、1 左侧、2 右侧、3 小键盘。
event.ctrlKey现代 · 推荐
这次事件发生时 Ctrl 是否按住。
event.shiftKey现代 · 推荐
这次事件发生时 Shift 是否按住。
event.altKey现代 · 推荐
这次事件发生时 Alt(Mac 上是 Option)是否按住。
event.metaKey现代 · 推荐
这次事件发生时 Meta 是否按住:Windows 上是 Win 键,Mac 上是 Command 键。
event.repeat现代 · 推荐
是不是按住不放产生的重复事件。
event.isComposing现代 · 推荐
输入法是否正在合成,中文、日文输入时为真。
getModifierState()只读参考
CapsLock 不可用 · NumLock 不可用 · ScrollLock 不可用 · AltGraph 不可用
读锁定键与 AltGraph 的当前状态,探测不到时给「不可用」而不是「否」。

keydown、keypress 与 keyup 三事件对照

字段keydownkeypresskeyup
event.key本次没有收到 keydown,Windows 上的截屏键就是典型例子。本键不触发 keypress(该事件已废弃,且只为可打印字符触发)。本次还没有收到 keyup,松开这个键之后这一列才会填上。
event.code本次没有收到 keydown,Windows 上的截屏键就是典型例子。本键不触发 keypress(该事件已废弃,且只为可打印字符触发)。本次还没有收到 keyup,松开这个键之后这一列才会填上。
event.keyCode本次没有收到 keydown,Windows 上的截屏键就是典型例子。本键不触发 keypress(该事件已废弃,且只为可打印字符触发)。本次还没有收到 keyup,松开这个键之后这一列才会填上。
event.which本次没有收到 keydown,Windows 上的截屏键就是典型例子。本键不触发 keypress(该事件已废弃,且只为可打印字符触发)。本次还没有收到 keyup,松开这个键之后这一列才会填上。
event.charCode本次没有收到 keydown,Windows 上的截屏键就是典型例子。本键不触发 keypress(该事件已废弃,且只为可打印字符触发)。本次还没有收到 keyup,松开这个键之后这一列才会填上。
event.location本次没有收到 keydown,Windows 上的截屏键就是典型例子。本键不触发 keypress(该事件已废弃,且只为可打印字符触发)。本次还没有收到 keyup,松开这个键之后这一列才会填上。
event.repeat本次没有收到 keydown,Windows 上的截屏键就是典型例子。本键不触发 keypress(该事件已废弃,且只为可打印字符触发)。本次还没有收到 keyup,松开这个键之后这一列才会填上。

组合键写法与可直接粘贴的代码

Windows / LinuxEnter
macOSEnter
修饰键状态
metaKey 在这个平台上的叫法Win 键 / Command 键
// 推荐写法:要的是「用户打出了什么」,就判 event.key
document.addEventListener('keydown', function (e) {
  if (e.repeat) return; // 长按会连续触发,按一次算一次时先挡掉
  if (e.key === 'Enter') {
    e.preventDefault();
    console.log('命中 回车');
  }
});

搜键名、搜中文、或直接输入数字键码反查

完整键码对照表(共 164 条,当前显示 164 条)

event.codeevent.keyShift 态keyCodelocation中文名差异注记
KeyAaA650标准字母 A按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyBbB660标准字母 B按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyCcC670标准字母 C按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyDdD680标准字母 D按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyEeE690标准字母 E按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyFfF700标准字母 F按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyGgG710标准字母 G按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyHhH720标准字母 H按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyIiI730标准字母 I按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyJjJ740标准字母 J按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyKkK750标准字母 K按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyLlL760标准字母 L按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyMmM770标准字母 M按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyNnN780标准字母 N按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyOoO790标准字母 O按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyPpP800标准字母 P按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyQqQ810标准字母 Q按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyRrR820标准字母 R按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeySsS830标准字母 S按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyTtT840标准字母 T按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyUuU850标准字母 U按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyVvV860标准字母 V按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyWwW870标准字母 W按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyXxX880标准字母 X按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyYyY890标准字母 Y按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
KeyZzZ900标准字母 Z按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Digit00)480标准数字 0按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit11!490标准数字 1按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit22@500标准数字 2按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit33#510标准数字 3按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit44$520标准数字 4按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit55%530标准数字 5按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit66^540标准数字 6按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit77&550标准数字 7按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit88*560标准数字 8按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Digit99(570标准数字 9按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。
Backquote`~1920标准反引号按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Minus-_1890标准减号老版本 Firefox 里分号的 keyCode 是 59、等号是 61、减号是 173,与 Chromium 的 186、187、189 不同,新版本已经对齐。 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Equal=+1870标准等号老版本 Firefox 里分号的 keyCode 是 59、等号是 61、减号是 173,与 Chromium 的 186、187、189 不同,新版本已经对齐。 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
BracketLeft[{2190标准左方括号按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
BracketRight]}2210标准右方括号按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Backslash\|2200标准反斜杠按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Semicolon;:1860标准分号老版本 Firefox 里分号的 keyCode 是 59、等号是 61、减号是 173,与 Chromium 的 186、187、189 不同,新版本已经对齐。 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Quote'"2220标准单引号按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Comma,<1880标准逗号按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Period.>1900标准句点按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
Slash/?1910标准斜杠按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
F1F11120标准F1 功能键
F2F21130标准F2 功能键
F3F31140标准F3 功能键
F4F41150标准F4 功能键
F5F51160标准F5 功能键这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
F6F61170标准F6 功能键
F7F71180标准F7 功能键
F8F81190标准F8 功能键
F9F91200标准F9 功能键
F10F101210标准F10 功能键
F11F111220标准F11 功能键这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
F12F121230标准F12 功能键这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
F13F131240标准F13 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F14F141250标准F14 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F15F151260标准F15 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F16F161270标准F16 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F17F171280标准F17 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F18F181290标准F18 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F19F191300标准F19 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F20F201310标准F20 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F21F211320标准F21 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F22F221330标准F22 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F23F231340标准F23 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
F24F241350标准F24 功能键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
BackspaceBackspace80标准退格
TabTab90标准制表符
EnterEnter130标准回车keyCode 13 同时对应主回车与小键盘回车,靠 code(Enter 与 NumpadEnter)或 location(0 与 3)才分得开。
EscapeEscape270标准退出keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。
Space" "320标准空格空格键的 event.key 是一个空格字符,不是字符串 Space;Space 是它的 code。
PageUpPageUp330标准上一页
PageDownPageDown340标准下一页
EndEnd350标准行尾
HomeHome360标准行首
ArrowLeftArrowLeft370标准左箭头keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。
ArrowUpArrowUp380标准上箭头keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。
ArrowRightArrowRight390标准右箭头keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。
ArrowDownArrowDown400标准下箭头keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。
InsertInsert450标准插入
DeleteDelete460标准删除
HelpHelp无稳定值0标准帮助这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
UndoUndo无稳定值0标准撤销这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
CutCut无稳定值0标准剪切这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
CopyCopy无稳定值0标准复制这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
PastePaste无稳定值0标准粘贴这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
AgainAgain无稳定值0标准重做这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
PropsProps无稳定值0标准属性这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
SelectSelect无稳定值0标准选择这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
OpenOpen无稳定值0标准打开这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
FindFind无稳定值0标准查找这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
Numpad00963小键盘小键盘 0关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad11973小键盘小键盘 1关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad22983小键盘小键盘 2关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad33993小键盘小键盘 3关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad441003小键盘小键盘 4关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad551013小键盘小键盘 5关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad661023小键盘小键盘 6关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad771033小键盘小键盘 7关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad881043小键盘小键盘 8关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
Numpad991053小键盘小键盘 9关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
NumpadMultiply*1063小键盘小键盘乘号关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
NumpadAdd+1073小键盘小键盘加号关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
NumpadSubtract-1093小键盘小键盘减号关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
NumpadDecimal.1103小键盘小键盘小数点关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
NumpadDivide/1113小键盘小键盘除号关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
NumpadEnterEnter133小键盘小键盘回车keyCode 13 同时对应主回车与小键盘回车,靠 code(Enter 与 NumpadEnter)或 location(0 与 3)才分得开。
NumpadEqual=无稳定值3小键盘小键盘等号这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
NumpadComma,无稳定值3小键盘小键盘逗号这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
NumpadParenLeft(无稳定值3小键盘小键盘左括号这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
NumpadParenRight)无稳定值3小键盘小键盘右括号这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
NumpadClearClear无稳定值3小键盘小键盘清除这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
NumpadBackspaceBackspace无稳定值3小键盘小键盘退格这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。
ShiftLeftShift161左 Shift左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。
ShiftRightShift162右 Shift左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。
ControlLeftControl171左 Ctrl左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。
ControlRightControl172右 Ctrl左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。
AltLeftAlt181左 Alt左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。
AltRightAlt182右 Alt左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。 Windows 上按 AltGr 会同时产生 ControlLeft 与 AltRight 两次 keydown,可靠判据是 getModifierState('AltGraph')。
MetaLeftMeta911左 Meta 键老版本 Firefox 把 Win 键与 Command 键的 keyCode 记作 224、key 记作 OS,现代浏览器统一为 Meta。 macOS 上按住 Command 时,其他键的 keyup 往往收不到,看起来像卡键,其实是系统行为,写快捷键逻辑不能依赖那次 keyup。
MetaRightMeta922右 Meta 键数字 93 在 Windows 上是右键菜单键 ContextMenu,在 macOS 的 Chrome 上是右 Command 键 MetaRight。 老版本 Firefox 把 Win 键与 Command 键的 keyCode 记作 224、key 记作 OS,现代浏览器统一为 Meta。 macOS 上按住 Command 时,其他键的 keyup 往往收不到,看起来像卡键,其实是系统行为,写快捷键逻辑不能依赖那次 keyup。
CapsLockCapsLock200标准大写锁定macOS 上大写锁定常常只在开启时给 keydown、关闭时给 keyup,不是一次完整的按下与松开。
NumLockNumLock1440标准数字锁定关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。
ScrollLockScrollLock1450标准滚动锁定
IntlBackslash\|2260标准ISO 左下角键key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。
IntlRo\无稳定值0标准JIS 右下角键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。
IntlYen\无稳定值0标准JIS 日元键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。
KanaModeKanaMode无稳定值0标准假名模式键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。
Lang1HangulMode无稳定值0标准韩文 / 假名切换键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。
Lang2HanjaMode无稳定值0标准汉字转换键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。
ConvertConvert无稳定值0标准日文转换键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。
NonConvertNonConvert无稳定值0标准日文不转换键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。
AudioVolumeUpAudioVolumeUp无稳定值0标准音量加这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
AudioVolumeDownAudioVolumeDown无稳定值0标准音量减这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
AudioVolumeMuteAudioVolumeMute无稳定值0标准静音这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
MediaPlayPauseMediaPlayPause无稳定值0标准播放暂停这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
MediaTrackNextMediaTrackNext无稳定值0标准下一曲这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
MediaTrackPreviousMediaTrackPrevious无稳定值0标准上一曲这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
MediaStopMediaStop无稳定值0标准停止播放这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
MediaSelectLaunchMediaPlayer无稳定值0标准打开播放器这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
BrowserBackBrowserBack无稳定值0标准浏览器后退这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
BrowserForwardBrowserForward无稳定值0标准浏览器前进这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
BrowserRefreshBrowserRefresh无稳定值0标准浏览器刷新这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
BrowserHomeBrowserHome无稳定值0标准浏览器主页这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
BrowserSearchBrowserSearch无稳定值0标准浏览器搜索这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
BrowserFavoritesBrowserFavorites无稳定值0标准浏览器收藏这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
BrowserStopBrowserStop无稳定值0标准浏览器停止这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
LaunchMailLaunchMail无稳定值0标准打开邮件这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
LaunchApp1LaunchMyComputer无稳定值0标准打开我的电脑这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
LaunchApp2LaunchCalculator无稳定值0标准打开计算器这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
PrintScreenPrintScreen440标准截屏键Windows 上截屏键在多数浏览器里只派发 keyup,收不到 keydown。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
PausePause190标准暂停键这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
ContextMenuContextMenu930标准右键菜单键数字 93 在 Windows 上是右键菜单键 ContextMenu,在 macOS 的 Chrome 上是右 Command 键 MetaRight。
PowerPower无稳定值0标准电源键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
SleepStandby无稳定值0标准睡眠键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
WakeUpWakeUp无稳定值0标准唤醒键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
EjectEject无稳定值0标准弹出键这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。
FnFn无稳定值0标准Fn 组合键Fn 通常在键盘固件层就被处理掉,网页收不到任何事件;规范里有 Fn 这个 code,实际几乎不出现。
FnLockFnLock无稳定值0标准Fn 锁定键Fn 通常在键盘固件层就被处理掉,网页收不到任何事件;规范里有 Fn 这个 code,实际几乎不出现。

最近 50 次按键(按下的键只在这个页面里显示,不记录、不保存、不上传;刷新页面即清空。

#typekeycodekeyCode修饰键重复
还没有记录,点上面的捕获区再按几个键。

键码数据版本 2026.09,共收录 164 个物理键、11 个分区。按下的键只在这个页面里显示,不记录、不保存、不上传;刷新页面即清空。

键盘键码查询是什么:一次按键有哪些字段

键盘键码查询,就是按下一个键之后立刻看到这次 KeyboardEvent 上的各个字段值:现代标准的 event.key 与 event.code,已废弃的 keyCode、which 和 charCode,再加上按键位置与修饰键状态。 换句话说,它回答的是「这个键在代码里应该怎么写」,而不是「这个键坏没坏」。

键码查询和 JavaScript 键码说的是同一件事

中文里常说的键码查询、keyCode 查询、键盘按键代码、按键键码,指的都是同一件事: 查一个物理按键在 JavaScript 键码体系里对应的那些值。本页把它们统一整理成一张表, 既能按下真键实时读,也能用搜索框按名字或数字查。

键码查询的英文叫法:keycode checker

英文语境下这类工具通常叫 keycode checker、javascript key codes 或 keyboard event viewer, 搜 what is my keycode、key code table、keycode table 找到的都是同一件事。它们查的那个对象 在规范里的正式名字是 KeyboardEvent,本页面板逐行列出的就是这个对象上的字段。 看英文资料时要留神一处歧义:英文里的 key code / key codes 多半指 keyCode 这个数字, 而不是 event.code 那个字符串,两者同名不同物。

键盘事件字段清单:哪些现代、哪些废弃

下面这张表就是本页面板逐行展示的内容,共 14 个键盘事件字段, 每一行都标明了它现在还该不该用。

键盘事件字段一览(数据版本 2026.09)
字段状态一句话说明
event.type只读参考这次事件本身的类型:keydown、keypress 还是 keyup。
event.key现代 · 推荐这次按键代表的字符或含义,受布局、输入语言与 Shift 影响。
event.code现代 · 推荐物理键位,与键帽字符、布局、输入法都无关,按下的位置决定它。
event.keyCode已废弃已废弃的数字键码,同一个数字可能对应多个物理键。
event.which已废弃keyCode 的别名,同样已废弃;jQuery 时代把它当作归一化入口。
event.charCode已废弃已废弃的字符码,只在 keypress 上有意义,其余事件恒为 0。
event.location只读参考按键位置:0 标准、1 左侧、2 右侧、3 小键盘。
event.ctrlKey现代 · 推荐这次事件发生时 Ctrl 是否按住。
event.shiftKey现代 · 推荐这次事件发生时 Shift 是否按住。
event.altKey现代 · 推荐这次事件发生时 Alt(Mac 上是 Option)是否按住。
event.metaKey现代 · 推荐这次事件发生时 Meta 是否按住:Windows 上是 Win 键,Mac 上是 Command 键。
event.repeat现代 · 推荐是不是按住不放产生的重复事件。
event.isComposing现代 · 推荐输入法是否正在合成,中文、日文输入时为真。
getModifierState()只读参考读锁定键与 AltGraph 的当前状态,探测不到时给「不可用」而不是「否」。

按键键码不是字符编码,别当成 ASCII 用

keyCode 不是字符编码,字母 A 的 65 与 ASCII 巧合相等,但 Escape 的 27、分号的 186 与任何字符编码都不对应。

要查一个字符的码位,请用 Unicode 转换; 要查 HTML 实体写法,请用 HTML 实体转换。本页只负责按键这一侧。

keyCode 数字来自 Windows 虚拟键码表

那这些数字到底是谁定的?答案是 Windows 的虚拟键码(Virtual-Key Codes)表:早期 IE 直接把这套 系统编号透传给网页,别的浏览器为了兼容跟着照抄,于是成了事实标准。逐个对一下就很清楚—— VK_BACK 是 0x08、VK_TAB 是 0x09、VK_RETURN 是 0x0D、VK_ESCAPE 是 0x1B、VK_SPACE 是 0x20、 VK_F1 是 0x70,换成十进制正好是本页表里的 89132732112。 知道这个来历,也就明白它为什么跨平台不可靠:一套 Windows 键盘的编号被搬到了所有系统上, Mac 与 Linux 上的键位、国际键盘的符号键都对不上号。W3C 的 UI Events 规范已经把 keyCode、charCode、which 收进「旧版按键属性」附录并标注废弃,只保留兼容用途, 新代码请直接写 event.key 与 event.code。

怎么在线查一个按键的 keyCode 和 code

三步:点一下捕获区拿到焦点,按下你想查的键,然后看面板顶部那句结论。 如果手边没有那个键,就在搜索框里输入它的名字或数字,对照表会就地过滤。

按键事件调试时,keydown 事件和 keyup 事件的分工

做按键事件调试时先分清三个阶段:keydown 事件在按下的一瞬间派发,是绝大多数逻辑该挂的地方; keypress 事件只为可打印字符派发且已废弃;keyup 事件在松开时派发一次。 本页的三事件对照表会把同一次按键在三个阶段上的字段值并排列出来,差异会被标红。

按键调试时的阻止默认行为开关

空格、方向键和翻页键默认会滚动页面。打开「阻止默认行为」开关后,白名单内的键就不再滚动, 方便你一个个按过去;Tab 永远不拦,因为拦住它会让只用键盘的人走不出这块区域。 需要把某个查询直接发给同事时,在网址后面加上问号 q 等于你要查的词即可,打开就是同一个结果。

没有实体键盘时怎么查

Android 软键盘上大量按键的 keyCode 一律是 229、key 是 Unidentified,所以手机上查键码意义有限。

所以在手机上更推荐直接用搜索框:输入 Enter、13、回车、方向键上都能命中, 下面那张对照表也是完整下发的,不需要按任何键就能翻。

keyCode 已废弃:该用 event.key 还是 event.code

一句话结论:要字符用 event.key,要物理键位用 event.code, keyCode 废弃之后只在读老代码时才需要看它。下面这张决策表是本页面板 tooltip 用的同一份数据。

该用哪个键盘事件字段:keyCode 替代方案决策表
字段状态什么时候用什么时候别用
event.type只读参考分清同一次按键的三个阶段时看它。别拿它判断按了哪个键,它跟按键无关。
event.key现代 · 推荐要的是「用户打出了什么」,比如判断回车、Esc、字母 k。要的是「按了键盘哪个位置」时别用它,换布局它就变了。
event.code现代 · 推荐要的是「键盘上哪个位置」,比如 WASD 移动、按键位注册快捷键。要展示给用户看的字符时别用它,KeyA 不是用户看到的东西。
event.keyCode已废弃只在读老代码、维护老项目时用来对照。新代码一律别写,输入法合成期间它还会固定成 229。
event.which已废弃只在读 jQuery 老代码时用来对照。新代码别写,它和 keyCode 一样有一对多的歧义。
event.charCode已废弃读老代码里 keypress 分支时用来对照。在 keydown 与 keyup 上读它没有任何意义。
event.location只读参考要区分左右修饰键,或区分主回车与小键盘回车。别拿它当唯一判据,直接用 code 更清楚。
event.ctrlKey现代 · 推荐判断组合键时和主键一起用。Mac 上的主修饰键是 Command,别只判 ctrlKey。
event.shiftKey现代 · 推荐判断组合键,或区分大小写意图。已经用 key 拿到上档字符时,再判一次 shiftKey 是多余的。
event.altKey现代 · 推荐判断组合键。Windows 上按 AltGr 也会让它为真,判 AltGr 要用 getModifierState。
event.metaKey现代 · 推荐做跨平台快捷键,Mac 分支判它、Windows 分支判 ctrlKey。别假设它在两个平台是同一个键,叫法与摆放位置都不同。
event.repeat现代 · 推荐需要「按一次算一次」时先挡掉重复事件。做长按加速这类效果时反而要留着它。
event.isComposing现代 · 推荐中文输入场景里判断这次按键是不是输入法的中间过程。老浏览器可能没有这个字段,需要配合 compositionstart 兜底。
getModifierState()只读参考要知道大写锁定、数字锁定有没有开,或判断 AltGr。别拿它读 Shift、Ctrl 这类普通修饰键,直接用 shiftKey 更省事。

event.key 和 event.code 的分工,一个例子就够

关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。

key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。

e.which 与 charCode 的处境

which 是 keyCode 的别名,同样已废弃;老代码里常见是因为 jQuery 曾把它当作归一化入口。

charCode 只在 keypress 上有意义,keydown 与 keyup 上恒为 0。

keypress 事件为什么不该再用

keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。

举个能自己复现的例子:按小写 a,keydown 上的 keyCode 是 65, 而 keypress 上是 97,因为后者给的是字符码。原生 JS keyCode 写法在这里最容易翻车, 这也是本页把三个阶段并排展示的原因。

数字键码反查:13、27、32 分别是什么键

先把小标题里那三个数字答了:13 是回车键(主键盘 Enter 与小键盘 NumpadEnter 共用同一个数字)、27 是 Esc、32 是空格。 在搜索框里直接输入数字就是数字键码反查,命中多个物理键时会全部列出来, 因为一个数字对应多个键正是 keyCode 被废弃的主要原因之一。

keyCode 13 既是回车键 keyCode,也是小键盘回车

keyCode 13 会同时命中 EnterNumpadEnter 两条, 它们的 location 分别是 03keyCode 13 同时对应主回车与小键盘回车,靠 code(Enter 与 NumpadEnter)或 location(0 与 3)才分得开。

空格 keyCode 是 32,Esc 键码是 27

常查的几个数字里,退格是 8、 Tab 是 9、Esc 键码是 27、 空格 keyCode 是 32。 需要注意的是这些数字与字符编码没有关系,只是历史遗留的扫描码。

换成搜索框里最常见的那种写法就是:keyCode 27 是 Esc、 keyCode 32 是空格、keyCode 13 是回车。 编辑区和锁定键这一组也常被问到:Tab 键码是 9、 Delete 键码是 46、Insert 是 45、 CapsLock 键码是 20、 NumLock 是 144。这里有个高频误会要点破: Delete(46)和退格(8) 是两个不同的键,中文都叫「删除键」,但一个往右删、一个往左删, 按「删除键键码」搜到的答案经常没说清是哪一个。

同一个 keyCode 是什么键,要看 code 才知道

常查数字键码与它们对应的物理键
keyCode对应几个键event.code中文名
81Backspace退格
91Tab制表符
132Enter NumpadEnter回车 小键盘回车
162ShiftLeft ShiftRight左 Shift 右 Shift
172ControlLeft ControlRight左 Ctrl 右 Ctrl
182AltLeft AltRight左 Alt 右 Alt
271Escape退出
321Space空格
371ArrowLeft左箭头
381ArrowUp上箭头
391ArrowRight右箭头
401ArrowDown下箭头
461Delete删除
932MetaRight ContextMenu右 Meta 键 右键菜单键

数字 93 在 Windows 上是右键菜单键 ContextMenu,在 macOS 的 Chrome 上是右 Command 键 MetaRight。

完整键码对照表:字母、功能键、小键盘与修饰键

本页的键盘 keyCode 表共收录 164 个物理键,分成 11 个分区, 并附 26 条跨浏览器与跨平台差异注记。完整的 keyCode 对照表就在上面的交互区里, 支持搜索与分区筛选。

键码对照表按分区拆开看

键码对照表分区速查(共 164 条)
分区条数keyCode 区间代表键说明
字母键2665 到 90KeyA KeyB KeyCA 到 Z,keyCode 65 到 90,与大写字母的 ASCII 码巧合相等。
数字键1048 到 57Digit0 Digit1 Digit2主键盘上的 0 到 9,keyCode 48 到 57,和小键盘不是一组值。
符号键11186 到 222Backquote Minus Equal分号、等号、括号一类,keyCode 落在 186 到 222,老浏览器差异最多。
功能键24112 到 135F1 F2 F3F1 到 F12 键码是 112 到 123,F13 到 F24 接着往下排。
编辑与导航键258 到 46Backspace Tab Enter回车、退格、方向键、翻页键,最常被查的一段控制键。
小键盘键2213 到 111Numpad0 Numpad1 Numpad2数字小键盘键码 96 到 105,关掉 NumLock 后 key 会变成导航含义。
修饰键816 到 92ShiftLeft ShiftRight ControlLeftShift、Ctrl、Alt、Meta,左右两侧键码相同,只能靠 code 区分。
锁定键320 到 145CapsLock NumLock ScrollLock大写锁定、数字锁定、滚动锁定,状态要用 getModifierState 读。
输入法与国际键8226 到 226IntlBackslash IntlRo IntlYenISO 与 JIS 键盘特有的键,多数没有稳定的数字键码。
媒体与浏览器键18无稳定值AudioVolumeUp AudioVolumeDown AudioVolumeMute音量、播放、前进后退,键码各系统不一致,本表统一记 0。
系统键919 到 93PrintScreen Pause ContextMenu截屏、电源、Fn,多数被固件或系统吃掉,网页收不到事件。

方向键键码与 F1 到 F12 键码速查

方向键键码是左 37、上 38、 右 39、下 40, 四个连号很好记。F1 到 F12 键码是 112123, F13 往后接着排到 135

小键盘键码与左右 Shift 区分

小键盘键码从 96 开始排到 105, 与主键盘那一排完全不是同一组数字。左右 Shift 区分则是另一个经典问题:左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。

中文输入法下 keyCode 一直是 229 怎么办

怎么办只有一句话:判断 event.isComposing,为真就直接返回,要拿最终文本就监听 compositionend, 不要去嗅探 229 这个数字。输入法 229 是中文开发者最高频的坑——只要输入法在合成, keydown 的 keyCode 就被固定成这个数字,用它判断用户输入了什么必然出错。

输入法 229 是怎么来的

输入法合成期间,多数浏览器把 keydown 的 keyCode 固定为 229、key 多为 Process,此时不能用 keyCode 判断用户输入了什么。

用 isComposing 判断中文输入法键码

判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。

实践里的顺序是:先判 isComposing,为真就直接返回;需要拿最终文本时监听 compositionend; 需要在合成前后做界面反馈时再补上 compositionstart。这三步能覆盖绝大多数中文输入场景。

安卓软键盘也是 229

Android 软键盘上大量按键的 keyCode 一律是 229、key 是 Unidentified,所以手机上查键码意义有限。

key 为 Unidentified 或 code 为空串,多见于手机软键盘、改键软件与远程桌面,属于浏览器也不知道你按了什么。

怎么判断 Ctrl 加 Shift 这类组合键并生成代码

组合键判断要同时看两样东西:四个修饰键状态字段,以及主键的 key 或 code。 本页会把你按下的组合键规范成固定顺序的字符串,两个平台的写法并排给出。

组合键判断要看四个修饰键状态

ctrlKey、altKey、shiftKey、metaKey 四个布尔字段决定按住了哪些修饰键。 修饰键顺序由代码固定成 Ctrl 到 Alt 到 Shift 到 Meta,不跟按下的先后走, 否则同一个组合会出现两种字符串,注册与匹配就对不上了。

Ctrl、Shift 组合键与 Mac Command 键码

Windows 与 Linux 上写成加号连接的形式,macOS 上写成符号连写的形式。 Mac Command 键码对应的是 metaKey 与 MetaLeft、MetaRight 这两个 code, 它和 Windows 的 Win 键共用同一个字段,做跨平台快捷键时必须分支处理。

macOS 上按住 Command 时,其他键的 keyup 往往收不到,看起来像卡键,其实是系统行为,写快捷键逻辑不能依赖那次 keyup。

快捷键代码生成:可直接粘贴的几种写法

交互区提供 6 段片段:两段原生 JS(分别按 key 与按 code 判断)、 一段 React 的 onKeyDown、一段 Vue 模板修饰符、一段 jQuery 老写法, 外加一段 keyCode 迁移到 code 的前后对照。每段都能直接粘进项目,不是伪代码。

Windows 上按 AltGr 会同时产生 ControlLeft 与 AltRight 两次 keydown,可靠判据是 getModifierState('AltGraph')。

哪些按键在网页里查不到键码

在任何网页上都查不到或查不全的,一共有六类键:浏览器占用的 F5、F11、F12,系统级组合键(切换窗口、锁屏), 被键盘固件吃掉的 Fn,只派发 keyup 的 Windows 截屏键,只给单边事件的 macOS 大写锁定, 以及压根没有稳定 keyCode、本表统一记 0 的媒体键、国际键与系统键(共 47 条)。 这不是工具的问题,把它们列清楚,比让你反复怀疑自己的键盘要有用得多。

浏览器和系统保留的按键收不到事件

这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。

Fn 通常在键盘固件层就被处理掉,网页收不到任何事件;规范里有 Fn 这个 code,实际几乎不出现。

这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。

长按 repeat 与只有 keyup 的截屏键

按住不放会连续派发 keydown 且 repeat 为 true,keyup 只有一次;需要按一次算一次时在处理函数开头写 if (e.repeat) return。

Windows 上截屏键在多数浏览器里只派发 keyup,收不到 keydown。

macOS 上大写锁定常常只在开启时给 keydown、关闭时给 keyup,不是一次完整的按下与松开。

真要排查按键失灵请用键盘测试

本页只回答「这个键在代码里怎么写」。如果你怀疑某个键真的失灵或卡键, 需要的是逐键点亮的可视化检测,请用 键盘测试。 想顺手看看浏览器与系统版本,可以用 UA 解析

如何使用键盘键码查询

1

点一下页面上方的捕获区,让它拿到焦点;焦点在搜索框里时工具不抓按键,免得你搜索时面板被自己的敲字刷屏。

2

按下你想查的那个键,面板会立刻列出这次事件的 14 个字段,并在顶部给出一句结论:要字符写哪一句、要物理键位写哪一句。

3

想看某个键的老写法就直接在搜索框输入数字,比如输入 13 会同时给出主回车与小键盘回车两条结果,一对多的歧义会全部列出来。

4

需要代码就看组合键卡片,6 段片段各带复制按钮,覆盖原生 JS、React、Vue 与 jQuery 老写法,还有一段迁移前后对照。

5

连续按几个键之后可以在历史区复制成 JSON 或 Markdown,也能下载 CSV(导出带 UTF-8 BOM,用 Excel 直接打开中文不乱码);历史最多保留 50 条,只在内存里,刷新页面即清空。

关于键盘键码查询的常见问题

键盘键码查询怎么用,能查到按键的哪些字段?
点一下页面上方的捕获区,然后按任意一个键,面板就会列出这次事件的全部字段:event.key、event.code、已废弃的 keyCode 与 which、只在 keypress 上有意义的 charCode、按键位置 location、四个修饰键状态、是否长按重复、是否处于输入法合成中,以及大写锁定这类锁定键的状态。每个字段旁边都有一句话说明它该不该用,也都能单独复制。
keyCode 13 是什么键,数字键码怎么反查?
在搜索框里直接输入数字就是反查。keyCode 13 会同时给出主键盘的 Enter 和小键盘的 NumpadEnter 两条结果,因为这两个物理键共用同一个数字。同理 16 对应左右 Shift、17 对应左右 Ctrl、18 对应左右 Alt。工具会把命中的每一条都列出来,不会只显示第一条,因为这种一对多的歧义正是 keyCode 被废弃的重要原因。
keyCode 废弃后该用 event.key 还是 event.code?
要的是「用户打出了什么字符」就用 event.key,比如判断回车、Esc 或字母 k;要的是「键盘上哪个物理位置」就用 event.code,比如做 WASD 移动或按键位注册快捷键。两者的区别在换布局时最明显:法式 AZERTY 键盘上,同一个物理键的 code 还是 KeyQ,key 却变成了 a。keyCode 与 which 只在读老代码时用来对照。
event.key 和 event.code 有什么区别?
event.key 是这次按键代表的字符或含义,随键盘布局、输入语言和 Shift 状态变化;event.code 是物理键位,只跟你按下键盘上的哪个位置有关,跟键帽印着什么字完全无关。一个最容易复现的例子是关掉数字锁定后按小键盘的 4:key 会变成 ArrowLeft,而 code 始终是 Numpad4。
为什么中文输入法下 keyCode 一直是 229?
因为输入法在合成阶段会截住按键,浏览器拿不到真正的字符,于是多数浏览器把 keydown 的 keyCode 统一填成 229、key 填成 Process。这不是浏览器出错,而是约定的占位值。正确做法是判断 event.isComposing,或者监听 compositionstart 与 compositionend 这一对事件,不要去嗅探 229 这个数字。
空格键的 event.key 为什么是一个空格?
因为 event.key 给的是这个键代表的字符,空格键代表的字符就是一个空格。字符串 Space 是它的 event.code 而不是 key。所以判断空格要写成比较一个引号里夹一个空格的字符串,写成比较 Space 会永远不成立。本工具在字段面板里把它显示成带引号的形式,就是为了让这个空格看得见。
怎么用 keyCode 判断 Ctrl+Shift+K 这类组合键?
新代码不要用 keyCode。判断组合键要同时看四个修饰键字段和一个主键字段:ctrlKey、altKey、shiftKey、metaKey 决定按住了哪些修饰键,key 或 code 决定主键是哪个。本工具会把你按下的组合键规范成固定顺序的字符串,并同时给出 Windows 与 macOS 两种写法,还能一键生成原生 JS、React、Vue 与 jQuery 四种框架下的判断代码。
Mac 上的 Command 键在键盘事件里是哪个字段?
Command 键对应 metaKey 这个字段,code 是 MetaLeft 或 MetaRight。同一个 metaKey 在 Windows 上代表的是 Win 键,所以做跨平台快捷键时不能假设两个平台是同一个键,通常要在 Mac 分支判 metaKey、在 Windows 分支判 ctrlKey。另外 macOS 上按住 Command 时,其他键的 keyup 常常收不到,这是系统行为不是卡键。
小键盘数字键和主键盘数字键的键码一样吗?
不一样。主键盘的 0 到 9 是 48 到 57,小键盘的 0 到 9 是 96 到 105,这是两组完全不同的数字。它们的 code 也不同,主键盘是 Digit0 这种写法,小键盘是 Numpad0。另外小键盘还受数字锁定影响:锁定关闭时,小键盘的 key 会变成方向或编辑含义,而 code 始终不变。
为什么按 F5、F11、F12 在网页里查不到键码?
这几个键被浏览器优先接管了,分别用于刷新、全屏和开发者工具,网页要么根本收不到事件,要么收到了也拦不住默认行为。同类情况还有系统级的组合键,比如切换窗口、退出应用、锁屏。本工具如实说明这一点,不会宣称能拦截它们,你在页面上看不到这些键的读数属于正常现象。
keypress 事件为什么收不到方向键和 Esc?
因为 keypress 只为可打印字符触发,方向键、Esc 与功能键不产生字符,所以根本不派发这个事件。它本身也已经被规范标为废弃。还有一个容易踩的坑:keypress 上的 keyCode 是字符码而不是键码,按小写 a 时 keydown 给 65、keypress 给 97,本工具的三事件对照表会把这个差异直接标出来。
左右 Shift、Ctrl、Alt 在键码上怎么区分?
在 keyCode 上完全区分不了,左右 Shift 都是 16、左右 Ctrl 都是 17、左右 Alt 都是 18。要分清只有两个办法:看 event.code,左右分别是 ShiftLeft 与 ShiftRight 这样的写法;或者看 event.location,1 表示左侧、2 表示右侧、3 表示小键盘、0 表示标准位置。这也是 code 比 keyCode 更值得用的一个例子。
按住不放一直触发 keydown,怎么过滤重复按键?
按住不放时浏览器会连续派发 keydown,其中除第一次以外都带着 repeat 为 true,而 keyup 只在最后松开时来一次。需要「按一次算一次」的场景,在处理函数开头写一句遇到 repeat 就直接返回即可。本工具的按键历史也做了同样的折叠,连续重复只占一行并记录次数,不会把列表刷爆。
同一个键在 Chrome 和 Firefox 里键码一样吗?
大部分一样,但符号键历史上差得最多。老版本 Firefox 里分号是 59、等号是 61、减号是 173,而 Chromium 系一直是 186、187、189;老版本 Firefox 还把 Win 键与 Command 键记成 224、key 记成 OS。新版本浏览器已经基本对齐,但只要你的代码还在读 keyCode,就仍然要考虑老浏览器。改用 event.code 就没有这个问题。
手机上能用键盘键码查询吗?
能打开也能用搜索和对照表,但按键读数在手机上参考价值有限。安卓与部分 iOS 软键盘会把大量按键的 keyCode 一律报成 229、key 报成 Unidentified,这是软键盘的实现方式决定的,不是工具坏了。如果手机接了实体蓝牙键盘,事件就和电脑上一样正常。所以在手机上更推荐用搜索框和分区对照表来查。
键盘键码查询会记录我按下的键吗?
不会。按下的键只在这个页面里显示,不记录、不拼接成文本、不写入本地存储、不上传,刷新页面就全部清空;本工具不具备键盘记录器的能力。浏览器里保存的只有平台写法、是否阻止默认行为这类视图偏好,与你按了什么键无关。站点自身仅有匿名访问量统计,同样不涉及按键内容。
键盘键码查询免费吗,需要注册吗?
完全免费,不需要注册也不需要登录,打开网页就能用,也没有次数限制。所有计算都在你自己的浏览器里完成,键码对照表随页面一起下发,查询和反查都不经过服务器。你可以把带着搜索词的网址直接收藏或分享给同事,对方打开就是同一个查询结果。