鍵盤按鍵碼
按下任意鍵,立即顯示 JavaScript 的 key、code、keyCode、位置與修飾鍵,也能觀察注音、倉頡等輸入法的組字事件。
最後按下的按鍵
按下任意鍵
使用注音、倉頡等輸入法時,組字期間的 keydown 會是 key「Process」、keyCode 229、isComposing 為 true;選字完成後的文字要看 compositionend 或 input 事件,不要用 keydown 判斷。
為了不讓你意外離開頁面而遺失紀錄,本工具只攔截會返回上一頁或重新整理的按鍵(Alt + ←/→、Backspace、F5、Ctrl/⌘ + R),其他按鍵照常運作。
事件紀錄
還沒有事件,請按下任意鍵。
常用按鍵對照表
key 會隨鍵盤配置與 Shift 改變,code 代表實體按鍵位置、不受配置影響。下表為美式鍵盤。 keyCode 與 which 已被標為過時,新程式請改用 key 或 code。
| key | code | keyCode |
|---|---|---|
| Enter | Enter | 13 |
| Escape | Escape | 27 |
| Tab | Tab | 9 |
| " " | Space | 32 |
| Backspace | Backspace | 8 |
| Delete | Delete | 46 |
| ArrowLeft | ArrowLeft | 37 |
| ArrowUp | ArrowUp | 38 |
| ArrowRight | ArrowRight | 39 |
| ArrowDown | ArrowDown | 40 |
| Home | Home | 36 |
| End | End | 35 |
| PageUp | PageUp | 33 |
| PageDown | PageDown | 34 |
| Shift | ShiftLeft | 16 |
| Control | ControlLeft | 17 |
| Alt | AltLeft | 18 |
| Meta | MetaLeft | 91 |
| CapsLock | CapsLock | 20 |
| F1 | F1 | 112 |
| F12 | F12 | 123 |
| "a" | KeyA | 65 |
| "z" | KeyZ | 90 |
| "0" | Digit0 | 48 |
| "9" | Digit9 | 57 |
| "0" | Numpad0 | 96 |
| Enter | NumpadEnter | 13 |
| "-" | Minus | 189 |
| "=" | Equal | 187 |
| "," | Comma | 188 |
| "." | Period | 190 |
| "/" | Slash | 191 |
| ";" | Semicolon | 186 |
| "'" | Quote | 222 |
| "[" | BracketLeft | 219 |
| "\\" | Backslash | 220 |
| "`" | Backquote | 192 |
使用說明
- 在頁面上按下任意鍵,上方會用大字顯示按鍵,並列出 event.key、event.code、keyCode、which、location 與修飾鍵。
- 要測試輸入法時,點進輸入欄位並切換到注音或倉頡,邊打字邊看事件紀錄中的 compositionstart、compositionupdate、compositionend 與 input。
- 要記錄 Tab 鍵時勾選「攔截 Tab 鍵」,在欄位中按 Tab 不會移動焦點;按 Esc 立即解除。
- 按「複製紀錄」把事件紀錄複製成文字,方便貼到問題回報中。
常見問題
key、code、keyCode 有什麼差別?
key 是按鍵產生的值,會隨鍵盤配置、Shift 與輸入法改變,例如同一個鍵可能是「a」或「A」。code 是實體按鍵的位置,例如「KeyA」,不受配置影響,適合做遊戲的 WASD 控制。keyCode 與 which 是舊的數字代碼,各瀏覽器不一致且已被標為過時,新程式請改用 key 或 code。
用注音輸入時,為什麼 key 是 Process、keyCode 是 229?
使用輸入法組字時,按鍵先交給輸入法處理,瀏覽器在 keydown 回報 key「Process」、keyCode 229,isComposing 為 true。這時按下的 Enter 通常是在「選字」而不是送出,所以程式在處理 Enter 送出表單或訊息前,應先檢查 event.isComposing,否則中文使用者選字時就會誤送出。
什麼是組字事件(composition events)?
輸入法開始組字時觸發 compositionstart,每次組字內容改變觸發 compositionupdate(data 是目前的注音或字根),選定文字後觸發 compositionend(data 是最後輸入的文字)。要取得使用者實際輸入的中文,應該看 compositionend 或 input 事件,而不是 keydown。
為什麼有些按鍵沒有反應,或會被瀏覽器攔截?
作業系統與瀏覽器會保留部分快捷鍵,例如 Ctrl/⌘ + W 關閉分頁、Ctrl/⌘ + T 開新分頁,網頁無法攔截,也收不到事件。本工具只會攔截會返回上一頁或重新整理的按鍵,避免你意外離開而遺失紀錄,其他按鍵都維持原本的功能。
為什麼 Tab 鍵預設不攔截?
Tab 是鍵盤使用者移動焦點的主要方式,永久攔截會讓人「困在」頁面裡,違反無障礙原則。需要時才勾選攔截,而且只在輸入欄位中有效,按 Esc 就會解除。
location 代表什麼?
用來區分同名但位置不同的按鍵:0 是一般按鍵,1 是左側(例如左 Shift),2 是右側(例如右 Ctrl),3 是數字鍵台(例如數字鍵台的 Enter 與 0)。