首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JavaScript 鍵盤事件 keyCode 對照表與現代化最佳實踐 (KeyboardEvent.key)

     編輯:Java 相關知識

經典 keyCode 對照表 (僅供維護舊代碼參考)

按鍵keyCode備註
Backspace8
Tab9
Enter13
Shift16
Ctrl17
Alt18
Esc27
Space32
PageUp33
PageDown34
End35
Home36
←37
↑38
→39
↓40
Insert45
Delete46
0-948-57主鍵盤
A-Z65-90不分大小寫
小鍵盤 0-996-105
小鍵盤 *106
小鍵盤 +107
小鍵盤 -109
小鍵盤 .110
小鍵盤 /111
F1-F12112-123
NumLock144
ScrollLock145
; :186
= +187
, <188
- _189
. >190
/ ?191
` ~192
[ {219
\ |220
] }221
' "222

⚠️ keyCode 已棄用:現代標準屬性

屬性類型值範例用途
event.keyString"Enter", "a", "ArrowLeft", "Shift"**推薦**:語義清晰,包含修飾鍵組合結果
event.codeString"KeyA", "ArrowLeft", "ShiftLeft"物理鍵位,不受鍵盤佈局影響
event.keyCodeNumber13, 65, 37**棄用**:數值無語義,跨瀏覽器不一致
event.whichNumber同 keyCode**棄用**:非標準

現代最佳實踐代碼範例

<input id="search" placeholder="按 Enter 搜尋" />

<script>
document.getElementById("search").addEventListener("keydown", function(e) {
    // 1. 使用 event.key 判斷 Enter
    if (e.key === "Enter") {
        e.preventDefault(); // 防止表單提交等默認行為
        doSearch(this.value);
    }

    // 2. 組合鍵判斷:event.ctrlKey / shiftKey / altKey / metaKey
    if (e.key === "s" && (e.ctrlKey || e.metaKey)) { // Ctrl+S / Cmd+S
        e.preventDefault();
        saveDraft();
    }

    // 3. 物理鍵位判斷 (遊戲/快捷鍵綁定)
    if (e.code === "Space") { jump(); } // 無論鍵盤佈局
});
</script>

特殊鍵 `event.key` 值速查

// 功能鍵
"Enter", "Tab", "Escape", "Backspace", "Delete", "Insert"
"ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"
"Home", "End", "PageUp", "PageDown"
"CapsLock", "NumLock", "ScrollLock"
"F1" - "F12"
"PrintScreen", "Pause", "ContextMenu"

// 修飾鍵 (單獨按下時)
"Shift", "Control", "Alt", "Meta" (Win/Command)
"ShiftLeft", "ControlRight" 等 (event.code 區分左右)

// 空白鍵
" " (空字符串)  // 注意:event.key === " " 而非 "Spacebar"

跨瀏覽器兼容策略 (漸進增強)

function getKey(event) {
    // 標準優先
    if (event.key) return event.key;

    // 兼容舊瀏覽器 (IE ≤ 10)
    var keyMap = {
        8: "Backspace", 9: "Tab", 13: "Enter", 16: "Shift", 17: "Control",
        18: "Alt", 27: "Escape", 32: " ", 37: "ArrowLeft", 38: "ArrowUp",
        39: "ArrowRight", 40: "ArrowDown", 46: "Delete"
    };
    return keyMap[event.keyCode] || String.fromCharCode(event.keyCode);
}

// 使用
element.addEventListener("keydown", function(e) {
    var key = getKey(e);
    if (key === "Enter") { ... }
});

常見誤區避雷

  • `keypress` 事件已棄用**:改用 `keydown` (所有鍵) 或 `beforeinput` (文字輸入)。
  • 大小寫判斷**:`e.key === "a"` 只匹配小寫;大寫為 `"A"`。組合鍵用 `e.shiftKey` 輔助判斷。
  • 中文輸入法**:`keydown` 觸發時 `e.key` 可能為 `"Process"` 或 `"Unidentified"`,實際文字在 `compositionend` / `input` 事件獲取。
  • 無障礙**:自定義快捷鍵需提供修改/關閉選項,避免與螢幕閱讀器、瀏覽器內建快捷鍵衝突。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved