JavaScript中应使用keydown/keyup事件配合.key和.code属性获取按键信息:.key返回意图输入的字符或语义名(如"Enter"、"A"),受修饰键影响;.code返回物理键位标识(如"KeyA"、"Enter"),与布局无关;废弃keyCode、which及keypress。

在 JavaScript 中,获取键盘事件中用户按下的键位信息主要通过 keydown、keyup 和 keypress(已废弃)事件监听,推荐使用 keydown 或 keyup,并优先使用现代标准的 `.key` 和 `.code` 属性,它们语义清晰、兼容性好、不受键盘布局影响。
用 event.key 获取按键的“字符值”
event.key 返回用户**意图输入的可读字符或语义名称**,比如按下 A 键(未按 Shift)返回 "a",按 Shift+A 返回 "A";按下 Enter 返回 "Enter",Escape 返回 "Escape",Ctrl 返回 "Control"。
- 适合判断功能键(如
"Enter"、"Tab"、"ArrowUp")或字母/数字的逻辑行为 - 受 Caps Lock、Shift、AltGraph 等修饰键影响,反映的是“当前要输出的内容”
- 注意:某些组合键(如 Ctrl+C)会触发事件,但
event.key可能是"c"(取决于浏览器),建议配合event.ctrlKey判断
用 event.code 获取按键的“物理位置”
event.code 返回键盘上**按键的物理位置标识符**,与键盘布局和当前状态无关。例如美式键盘按下左下角的 Ctrl 键,始终返回 "ControlLeft";按下标有 “A” 的那个键(无论是否按 Shift),都返回 "KeyA"。
- 适合实现“按键绑定”(如游戏控制、快捷键配置),确保不同语言键盘用户操作一致
- 值固定为字符串,如
"Digit1"、"Semicolon"、"ArrowDown"、"Space" - 不能直接反映输入内容(比如
event.code === "KeyA"时,event.key可能是"a"或"A")
避免使用已弃用的属性
event.keyCode 和 event.which 已被标准废弃,Chrome、Firefox 等现代浏览器虽仍支持,但行为不一致且难以维护:
立即学习“Java免费学习笔记(深入)”;
-
keyCode混淆了键码(scan code)和字符码(char code),语义模糊 -
keypress事件本身已被移除,不应再使用 - MDN 明确标注为 Deprecated,新项目务必避开
实际监听写法示例
推荐监听 keydown 并结合 key 和 code 判断:
document.addEventListener('keydown', (e) => {
console.log('key:', e.key); // "Enter", "a", "Shift"
console.log('code:', e.code); // "Enter", "KeyA", "ShiftLeft"
console.log('ctrl:', e.ctrlKey); // true / false
console.log('shift:', e.shiftKey);
// 示例:拦截 Enter 提交,但允许 Shift+Enter 换行
if (e.key === 'Enter' && !e.shiftKey) {
e.preventDefault();
handleSubmit();
}
});


















