键盘键码查询
键盘键码查询,是指按下任意一个键就实时看到这次按键的 KeyboardEvent 字段:event.key(字符或含义)、event.code(物理键位)、已废弃的 keyCode 与 which、按键位置 location 与修饰键状态。本工具另带全量键码对照表、数字键码反查、三种事件字段对照和一键生成的组合键判断代码。全程浏览器本地运行,只显示不记录、不外发按键内容,免费无需注册。
要字符就写 e.key === 'Enter',要物理键位就写 e.code === 'Enter'; 老写法 e.keyCode === 13 // 已废弃
- 提示keyCode 与 which 都已废弃,新代码请用 event.key(要字符)或 event.code(要物理键位)。
- 提示keyCode 13 同时对应主回车与小键盘回车,靠 code(Enter 与 NumpadEnter)或 location(0 与 3)才分得开。
这一次按键的 14 个字段
event.type只读参考event.key现代 · 推荐event.code现代 · 推荐event.keyCode已废弃event.which已废弃event.charCode已废弃event.location只读参考event.ctrlKey现代 · 推荐event.shiftKey现代 · 推荐event.altKey现代 · 推荐event.metaKey现代 · 推荐event.repeat现代 · 推荐event.isComposing现代 · 推荐getModifierState()只读参考keydown、keypress 与 keyup 三事件对照
| 字段 | keydown | keypress | keyup |
|---|---|---|---|
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,松开这个键之后这一列才会填上。 |
组合键写法与可直接粘贴的代码
// 推荐写法:要的是「用户打出了什么」,就判 event.key
document.addEventListener('keydown', function (e) {
if (e.repeat) return; // 长按会连续触发,按一次算一次时先挡掉
if (e.key === 'Enter') {
e.preventDefault();
console.log('命中 回车');
}
});搜键名、搜中文、或直接输入数字键码反查
完整键码对照表(共 164 条,当前显示 164 条)
| event.code | event.key | Shift 态 | keyCode | location | 中文名 | 差异注记 |
|---|---|---|---|---|---|---|
KeyA | a | A | 65 | 0(标准) | 字母 A | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyB | b | B | 66 | 0(标准) | 字母 B | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyC | c | C | 67 | 0(标准) | 字母 C | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyD | d | D | 68 | 0(标准) | 字母 D | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyE | e | E | 69 | 0(标准) | 字母 E | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyF | f | F | 70 | 0(标准) | 字母 F | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyG | g | G | 71 | 0(标准) | 字母 G | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyH | h | H | 72 | 0(标准) | 字母 H | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyI | i | I | 73 | 0(标准) | 字母 I | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyJ | j | J | 74 | 0(标准) | 字母 J | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyK | k | K | 75 | 0(标准) | 字母 K | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyL | l | L | 76 | 0(标准) | 字母 L | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyM | m | M | 77 | 0(标准) | 字母 M | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyN | n | N | 78 | 0(标准) | 字母 N | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyO | o | O | 79 | 0(标准) | 字母 O | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyP | p | P | 80 | 0(标准) | 字母 P | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyQ | q | Q | 81 | 0(标准) | 字母 Q | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyR | r | R | 82 | 0(标准) | 字母 R | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyS | s | S | 83 | 0(标准) | 字母 S | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyT | t | T | 84 | 0(标准) | 字母 T | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyU | u | U | 85 | 0(标准) | 字母 U | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyV | v | V | 86 | 0(标准) | 字母 V | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyW | w | W | 87 | 0(标准) | 字母 W | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyX | x | X | 88 | 0(标准) | 字母 X | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyY | y | Y | 89 | 0(标准) | 字母 Y | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
KeyZ | z | Z | 90 | 0(标准) | 字母 Z | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Digit0 | 0 | ) | 48 | 0(标准) | 数字 0 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit1 | 1 | ! | 49 | 0(标准) | 数字 1 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit2 | 2 | @ | 50 | 0(标准) | 数字 2 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit3 | 3 | # | 51 | 0(标准) | 数字 3 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit4 | 4 | $ | 52 | 0(标准) | 数字 4 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit5 | 5 | % | 53 | 0(标准) | 数字 5 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit6 | 6 | ^ | 54 | 0(标准) | 数字 6 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit7 | 7 | & | 55 | 0(标准) | 数字 7 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit8 | 8 | * | 56 | 0(标准) | 数字 8 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Digit9 | 9 | ( | 57 | 0(标准) | 数字 9 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 |
Backquote | ` | ~ | 192 | 0(标准) | 反引号 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Minus | - | _ | 189 | 0(标准) | 减号 | 老版本 Firefox 里分号的 keyCode 是 59、等号是 61、减号是 173,与 Chromium 的 186、187、189 不同,新版本已经对齐。 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Equal | = | + | 187 | 0(标准) | 等号 | 老版本 Firefox 里分号的 keyCode 是 59、等号是 61、减号是 173,与 Chromium 的 186、187、189 不同,新版本已经对齐。 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
BracketLeft | [ | { | 219 | 0(标准) | 左方括号 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
BracketRight | ] | } | 221 | 0(标准) | 右方括号 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Backslash | \ | | | 220 | 0(标准) | 反斜杠 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Semicolon | ; | : | 186 | 0(标准) | 分号 | 老版本 Firefox 里分号的 keyCode 是 59、等号是 61、减号是 173,与 Chromium 的 186、187、189 不同,新版本已经对齐。 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Quote | ' | " | 222 | 0(标准) | 单引号 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Comma | , | < | 188 | 0(标准) | 逗号 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Period | . | > | 190 | 0(标准) | 句点 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
Slash | / | ? | 191 | 0(标准) | 斜杠 | 按住 Shift 时 event.key 会变成上档字符,而 event.code 始终不变,这是 key 与 code 分工最直观的一个例子。 key 随键盘布局与输入语言变化,法式 AZERTY 上 KeyQ 打出来是 a,而 code 不变;要物理位置就用 code。 |
F1 | F1 | — | 112 | 0(标准) | F1 功能键 | — |
F2 | F2 | — | 113 | 0(标准) | F2 功能键 | — |
F3 | F3 | — | 114 | 0(标准) | F3 功能键 | — |
F4 | F4 | — | 115 | 0(标准) | F4 功能键 | — |
F5 | F5 | — | 116 | 0(标准) | F5 功能键 | 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
F6 | F6 | — | 117 | 0(标准) | F6 功能键 | — |
F7 | F7 | — | 118 | 0(标准) | F7 功能键 | — |
F8 | F8 | — | 119 | 0(标准) | F8 功能键 | — |
F9 | F9 | — | 120 | 0(标准) | F9 功能键 | — |
F10 | F10 | — | 121 | 0(标准) | F10 功能键 | — |
F11 | F11 | — | 122 | 0(标准) | F11 功能键 | 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
F12 | F12 | — | 123 | 0(标准) | F12 功能键 | 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
F13 | F13 | — | 124 | 0(标准) | F13 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F14 | F14 | — | 125 | 0(标准) | F14 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F15 | F15 | — | 126 | 0(标准) | F15 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F16 | F16 | — | 127 | 0(标准) | F16 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F17 | F17 | — | 128 | 0(标准) | F17 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F18 | F18 | — | 129 | 0(标准) | F18 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F19 | F19 | — | 130 | 0(标准) | F19 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F20 | F20 | — | 131 | 0(标准) | F20 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F21 | F21 | — | 132 | 0(标准) | F21 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F22 | F22 | — | 133 | 0(标准) | F22 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F23 | F23 | — | 134 | 0(标准) | F23 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
F24 | F24 | — | 135 | 0(标准) | F24 功能键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
Backspace | Backspace | — | 8 | 0(标准) | 退格 | — |
Tab | Tab | — | 9 | 0(标准) | 制表符 | — |
Enter | Enter | — | 13 | 0(标准) | 回车 | keyCode 13 同时对应主回车与小键盘回车,靠 code(Enter 与 NumpadEnter)或 location(0 与 3)才分得开。 |
Escape | Escape | — | 27 | 0(标准) | 退出 | keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。 |
Space | " " | — | 32 | 0(标准) | 空格 | 空格键的 event.key 是一个空格字符,不是字符串 Space;Space 是它的 code。 |
PageUp | PageUp | — | 33 | 0(标准) | 上一页 | — |
PageDown | PageDown | — | 34 | 0(标准) | 下一页 | — |
End | End | — | 35 | 0(标准) | 行尾 | — |
Home | Home | — | 36 | 0(标准) | 行首 | — |
ArrowLeft | ArrowLeft | — | 37 | 0(标准) | 左箭头 | keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。 |
ArrowUp | ArrowUp | — | 38 | 0(标准) | 上箭头 | keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。 |
ArrowRight | ArrowRight | — | 39 | 0(标准) | 右箭头 | keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。 |
ArrowDown | ArrowDown | — | 40 | 0(标准) | 下箭头 | keypress 事件已废弃,且不为方向键、Esc、功能键这些非打印键触发;它上面的 keyCode 是字符码而不是键码。 |
Insert | Insert | — | 45 | 0(标准) | 插入 | — |
Delete | Delete | — | 46 | 0(标准) | 删除 | — |
Help | Help | — | 无稳定值 | 0(标准) | 帮助 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Undo | Undo | — | 无稳定值 | 0(标准) | 撤销 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Cut | Cut | — | 无稳定值 | 0(标准) | 剪切 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Copy | Copy | — | 无稳定值 | 0(标准) | 复制 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Paste | Paste | — | 无稳定值 | 0(标准) | 粘贴 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Again | Again | — | 无稳定值 | 0(标准) | 重做 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Props | Props | — | 无稳定值 | 0(标准) | 属性 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Select | Select | — | 无稳定值 | 0(标准) | 选择 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Open | Open | — | 无稳定值 | 0(标准) | 打开 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Find | Find | — | 无稳定值 | 0(标准) | 查找 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Numpad0 | 0 | — | 96 | 3(小键盘) | 小键盘 0 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad1 | 1 | — | 97 | 3(小键盘) | 小键盘 1 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad2 | 2 | — | 98 | 3(小键盘) | 小键盘 2 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad3 | 3 | — | 99 | 3(小键盘) | 小键盘 3 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad4 | 4 | — | 100 | 3(小键盘) | 小键盘 4 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad5 | 5 | — | 101 | 3(小键盘) | 小键盘 5 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad6 | 6 | — | 102 | 3(小键盘) | 小键盘 6 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad7 | 7 | — | 103 | 3(小键盘) | 小键盘 7 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad8 | 8 | — | 104 | 3(小键盘) | 小键盘 8 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
Numpad9 | 9 | — | 105 | 3(小键盘) | 小键盘 9 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
NumpadMultiply | * | — | 106 | 3(小键盘) | 小键盘乘号 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
NumpadAdd | + | — | 107 | 3(小键盘) | 小键盘加号 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
NumpadSubtract | - | — | 109 | 3(小键盘) | 小键盘减号 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
NumpadDecimal | . | — | 110 | 3(小键盘) | 小键盘小数点 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
NumpadDivide | / | — | 111 | 3(小键盘) | 小键盘除号 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
NumpadEnter | Enter | — | 13 | 3(小键盘) | 小键盘回车 | keyCode 13 同时对应主回车与小键盘回车,靠 code(Enter 与 NumpadEnter)或 location(0 与 3)才分得开。 |
NumpadEqual | = | — | 无稳定值 | 3(小键盘) | 小键盘等号 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
NumpadComma | , | — | 无稳定值 | 3(小键盘) | 小键盘逗号 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
NumpadParenLeft | ( | — | 无稳定值 | 3(小键盘) | 小键盘左括号 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
NumpadParenRight | ) | — | 无稳定值 | 3(小键盘) | 小键盘右括号 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
NumpadClear | Clear | — | 无稳定值 | 3(小键盘) | 小键盘清除 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
NumpadBackspace | Backspace | — | 无稳定值 | 3(小键盘) | 小键盘退格 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 |
ShiftLeft | Shift | — | 16 | 1(左) | 左 Shift | 左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。 |
ShiftRight | Shift | — | 16 | 2(右) | 右 Shift | 左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。 |
ControlLeft | Control | — | 17 | 1(左) | 左 Ctrl | 左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。 |
ControlRight | Control | — | 17 | 2(右) | 右 Ctrl | 左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。 |
AltLeft | Alt | — | 18 | 1(左) | 左 Alt | 左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。 |
AltRight | Alt | — | 18 | 2(右) | 右 Alt | 左右 Shift、Ctrl、Alt 的 keyCode 完全相同,分别是 16、17、18,只能靠 code 或 location(1 是左、2 是右)区分。 Windows 上按 AltGr 会同时产生 ControlLeft 与 AltRight 两次 keydown,可靠判据是 getModifierState('AltGraph')。 |
MetaLeft | Meta | — | 91 | 1(左) | 左 Meta 键 | 老版本 Firefox 把 Win 键与 Command 键的 keyCode 记作 224、key 记作 OS,现代浏览器统一为 Meta。 macOS 上按住 Command 时,其他键的 keyup 往往收不到,看起来像卡键,其实是系统行为,写快捷键逻辑不能依赖那次 keyup。 |
MetaRight | Meta | — | 92 | 2(右) | 右 Meta 键 | 数字 93 在 Windows 上是右键菜单键 ContextMenu,在 macOS 的 Chrome 上是右 Command 键 MetaRight。 老版本 Firefox 把 Win 键与 Command 键的 keyCode 记作 224、key 记作 OS,现代浏览器统一为 Meta。 macOS 上按住 Command 时,其他键的 keyup 往往收不到,看起来像卡键,其实是系统行为,写快捷键逻辑不能依赖那次 keyup。 |
CapsLock | CapsLock | — | 20 | 0(标准) | 大写锁定 | macOS 上大写锁定常常只在开启时给 keydown、关闭时给 keyup,不是一次完整的按下与松开。 |
NumLock | NumLock | — | 144 | 0(标准) | 数字锁定 | 关掉 NumLock 后小键盘的 key 会变成导航含义,小键盘 4 变 ArrowLeft、5 变 Clear、小数点变 Delete,但 code 不变。 |
ScrollLock | ScrollLock | — | 145 | 0(标准) | 滚动锁定 | — |
IntlBackslash | \ | | | 226 | 0(标准) | 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。 |
KanaMode | KanaMode | — | 无稳定值 | 0(标准) | 假名模式键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。 |
Lang1 | HangulMode | — | 无稳定值 | 0(标准) | 韩文 / 假名切换键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。 |
Lang2 | HanjaMode | — | 无稳定值 | 0(标准) | 汉字转换键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。 |
Convert | Convert | — | 无稳定值 | 0(标准) | 日文转换键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。 |
NonConvert | NonConvert | — | 无稳定值 | 0(标准) | 日文不转换键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 判断输入法状态请用 event.isComposing,或监听 compositionstart 与 compositionend,不要去嗅探 229。 |
AudioVolumeUp | AudioVolumeUp | — | 无稳定值 | 0(标准) | 音量加 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
AudioVolumeDown | AudioVolumeDown | — | 无稳定值 | 0(标准) | 音量减 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
AudioVolumeMute | AudioVolumeMute | — | 无稳定值 | 0(标准) | 静音 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
MediaPlayPause | MediaPlayPause | — | 无稳定值 | 0(标准) | 播放暂停 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
MediaTrackNext | MediaTrackNext | — | 无稳定值 | 0(标准) | 下一曲 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
MediaTrackPrevious | MediaTrackPrevious | — | 无稳定值 | 0(标准) | 上一曲 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
MediaStop | MediaStop | — | 无稳定值 | 0(标准) | 停止播放 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
MediaSelect | LaunchMediaPlayer | — | 无稳定值 | 0(标准) | 打开播放器 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
BrowserBack | BrowserBack | — | 无稳定值 | 0(标准) | 浏览器后退 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
BrowserForward | BrowserForward | — | 无稳定值 | 0(标准) | 浏览器前进 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
BrowserRefresh | BrowserRefresh | — | 无稳定值 | 0(标准) | 浏览器刷新 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
BrowserHome | BrowserHome | — | 无稳定值 | 0(标准) | 浏览器主页 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
BrowserSearch | BrowserSearch | — | 无稳定值 | 0(标准) | 浏览器搜索 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
BrowserFavorites | BrowserFavorites | — | 无稳定值 | 0(标准) | 浏览器收藏 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
BrowserStop | BrowserStop | — | 无稳定值 | 0(标准) | 浏览器停止 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
LaunchMail | LaunchMail | — | 无稳定值 | 0(标准) | 打开邮件 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
LaunchApp1 | LaunchMyComputer | — | 无稳定值 | 0(标准) | 打开我的电脑 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
LaunchApp2 | LaunchCalculator | — | 无稳定值 | 0(标准) | 打开计算器 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
PrintScreen | PrintScreen | — | 44 | 0(标准) | 截屏键 | Windows 上截屏键在多数浏览器里只派发 keyup,收不到 keydown。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Pause | Pause | — | 19 | 0(标准) | 暂停键 | 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
ContextMenu | ContextMenu | — | 93 | 0(标准) | 右键菜单键 | 数字 93 在 Windows 上是右键菜单键 ContextMenu,在 macOS 的 Chrome 上是右 Command 键 MetaRight。 |
Power | Power | — | 无稳定值 | 0(标准) | 电源键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Sleep | Standby | — | 无稳定值 | 0(标准) | 睡眠键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
WakeUp | WakeUp | — | 无稳定值 | 0(标准) | 唤醒键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Eject | Eject | — | 无稳定值 | 0(标准) | 弹出键 | 这个键在不同系统与浏览器上没有稳定的 keyCode,本表统一记 0,请不要依赖这个数字做判断。 这个键通常被浏览器或操作系统优先接管,网页可能收不到事件,也拦不住它的默认行为。 |
Fn | Fn | — | 无稳定值 | 0(标准) | Fn 组合键 | Fn 通常在键盘固件层就被处理掉,网页收不到任何事件;规范里有 Fn 这个 code,实际几乎不出现。 |
FnLock | FnLock | — | 无稳定值 | 0(标准) | Fn 锁定键 | Fn 通常在键盘固件层就被处理掉,网页收不到任何事件;规范里有 Fn 这个 code,实际几乎不出现。 |
最近 50 次按键(按下的键只在这个页面里显示,不记录、不保存、不上传;刷新页面即清空。)
| # | type | key | code | keyCode | 修饰键 | 重复 |
|---|---|---|---|---|---|---|
| 还没有记录,点上面的捕获区再按几个键。 | ||||||
键码数据版本 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 个键盘事件字段, 每一行都标明了它现在还该不该用。
| 字段 | 状态 | 一句话说明 |
|---|---|---|
| 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,换成十进制正好是本页表里的 8、9、13、27、32、112。 知道这个来历,也就明白它为什么跨平台不可靠:一套 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 用的同一份数据。
| 字段 | 状态 | 什么时候用 | 什么时候别用 |
|---|---|---|---|
| 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 会同时命中 Enter 与 NumpadEnter 两条, 它们的 location 分别是 0 与 3。keyCode 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 | 中文名 |
|---|---|---|---|
| 8 | 1 | Backspace | 退格 |
| 9 | 1 | Tab | 制表符 |
| 13 | 2 | Enter NumpadEnter | 回车 小键盘回车 |
| 16 | 2 | ShiftLeft ShiftRight | 左 Shift 右 Shift |
| 17 | 2 | ControlLeft ControlRight | 左 Ctrl 右 Ctrl |
| 18 | 2 | AltLeft AltRight | 左 Alt 右 Alt |
| 27 | 1 | Escape | 退出 |
| 32 | 1 | Space | 空格 |
| 37 | 1 | ArrowLeft | 左箭头 |
| 38 | 1 | ArrowUp | 上箭头 |
| 39 | 1 | ArrowRight | 右箭头 |
| 40 | 1 | ArrowDown | 下箭头 |
| 46 | 1 | Delete | 删除 |
| 93 | 2 | MetaRight ContextMenu | 右 Meta 键 右键菜单键 |
数字 93 在 Windows 上是右键菜单键 ContextMenu,在 macOS 的 Chrome 上是右 Command 键 MetaRight。
完整键码对照表:字母、功能键、小键盘与修饰键
本页的键盘 keyCode 表共收录 164 个物理键,分成 11 个分区, 并附 26 条跨浏览器与跨平台差异注记。完整的 keyCode 对照表就在上面的交互区里, 支持搜索与分区筛选。
键码对照表按分区拆开看
| 分区 | 条数 | keyCode 区间 | 代表键 | 说明 |
|---|---|---|---|---|
| 字母键 | 26 | 65 到 90 | KeyA KeyB KeyC | A 到 Z,keyCode 65 到 90,与大写字母的 ASCII 码巧合相等。 |
| 数字键 | 10 | 48 到 57 | Digit0 Digit1 Digit2 | 主键盘上的 0 到 9,keyCode 48 到 57,和小键盘不是一组值。 |
| 符号键 | 11 | 186 到 222 | Backquote Minus Equal | 分号、等号、括号一类,keyCode 落在 186 到 222,老浏览器差异最多。 |
| 功能键 | 24 | 112 到 135 | F1 F2 F3 | F1 到 F12 键码是 112 到 123,F13 到 F24 接着往下排。 |
| 编辑与导航键 | 25 | 8 到 46 | Backspace Tab Enter | 回车、退格、方向键、翻页键,最常被查的一段控制键。 |
| 小键盘键 | 22 | 13 到 111 | Numpad0 Numpad1 Numpad2 | 数字小键盘键码 96 到 105,关掉 NumLock 后 key 会变成导航含义。 |
| 修饰键 | 8 | 16 到 92 | ShiftLeft ShiftRight ControlLeft | Shift、Ctrl、Alt、Meta,左右两侧键码相同,只能靠 code 区分。 |
| 锁定键 | 3 | 20 到 145 | CapsLock NumLock ScrollLock | 大写锁定、数字锁定、滚动锁定,状态要用 getModifierState 读。 |
| 输入法与国际键 | 8 | 226 到 226 | IntlBackslash IntlRo IntlYen | ISO 与 JIS 键盘特有的键,多数没有稳定的数字键码。 |
| 媒体与浏览器键 | 18 | 无稳定值 | AudioVolumeUp AudioVolumeDown AudioVolumeMute | 音量、播放、前进后退,键码各系统不一致,本表统一记 0。 |
| 系统键 | 9 | 19 到 93 | PrintScreen Pause ContextMenu | 截屏、电源、Fn,多数被固件或系统吃掉,网页收不到事件。 |
方向键键码与 F1 到 F12 键码速查
方向键键码是左 37、上 38、 右 39、下 40, 四个连号很好记。F1 到 F12 键码是 112 到 123, 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 解析。
如何使用键盘键码查询
点一下页面上方的捕获区,让它拿到焦点;焦点在搜索框里时工具不抓按键,免得你搜索时面板被自己的敲字刷屏。
按下你想查的那个键,面板会立刻列出这次事件的 14 个字段,并在顶部给出一句结论:要字符写哪一句、要物理键位写哪一句。
想看某个键的老写法就直接在搜索框输入数字,比如输入 13 会同时给出主回车与小键盘回车两条结果,一对多的歧义会全部列出来。
需要代码就看组合键卡片,6 段片段各带复制按钮,覆盖原生 JS、React、Vue 与 jQuery 老写法,还有一段迁移前后对照。
连续按几个键之后可以在历史区复制成 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,这是软键盘的实现方式决定的,不是工具坏了。如果手机接了实体蓝牙键盘,事件就和电脑上一样正常。所以在手机上更推荐用搜索框和分区对照表来查。
- 键盘键码查询会记录我按下的键吗?
- 不会。按下的键只在这个页面里显示,不记录、不拼接成文本、不写入本地存储、不上传,刷新页面就全部清空;本工具不具备键盘记录器的能力。浏览器里保存的只有平台写法、是否阻止默认行为这类视图偏好,与你按了什么键无关。站点自身仅有匿名访问量统计,同样不涉及按键内容。
- 键盘键码查询免费吗,需要注册吗?
- 完全免费,不需要注册也不需要登录,打开网页就能用,也没有次数限制。所有计算都在你自己的浏览器里完成,键码对照表随页面一起下发,查询和反查都不经过服务器。你可以把带着搜索词的网址直接收藏或分享给同事,对方打开就是同一个查询结果。