過去幾個版本的 Chrome 都新增了兩個 KeyboardEvent
,用於傳遞至 keydown
、keypress
和 keyup
事件監聽器的參數。code
屬性 (Chrome 48 中新增) 和 key
屬性 (Chrome 51 中新增) 都能讓開發人員以簡單的方式取得資訊,否則使用舊版屬性會困難。
程式碼屬性
首先是 code
屬性。此屬性會設為字串,代表按下產生 KeyboardEvent
的按鍵,但不考量目前的鍵盤配置 (例如 QWERTY 與 Dvorak)、語言代碼 (例如英文與法文),或任何輔助鍵。當您想知道按下的是哪個實體鍵,而非對應的字元時,這項功能就很實用。舉例來說,如果您正在編寫遊戲,可能會希望使用特定一組按鍵來讓玩家移動到不同方向,而這類對應方式最好不受鍵盤配置影響。
鍵屬性
接下來,我們有新的 key
屬性。這項屬性也設為 字串,但 code
會傳回按下實體鍵的相關資訊,而 key
則會考量目前的鍵盤配置、語言代碼和輔助鍵,並包含該鍵產生的字元。如要瞭解畫面上會顯示哪些字元 (就像使用者輸入文字輸入內容一樣),請查看 key
屬性的值。
實務上該怎麼做呢?
舉例來說,假設使用者使用的是美國鍵盤,並採用 QWERTY 鍵盤配置。按下鍵盤上的實體 Q
鍵,就會產生 KeyboardEvent
,其中 code
屬性設為 "KeyQ"
。無論鍵盤配置為何,也無論是否有任何其他輔助鍵,這項規則都適用。舉例來說,在法文 (AZERTY) 鍵盤上,這個按鍵仍會顯示 "KeyQ"
的 code
,即使鍵帽上印的字母是「a」。在同一個美國鍵盤上按下實體 Q
鍵,通常會產生 KeyboardEvent
,其中 key
設為 "q"
(沒有輔助鍵)、"Q"
(使用 Shift 或 Caps Lock) 或 "œ"
(在 OS X 上使用 Alt)。在法文 AZERTY 鍵盤上,這個按鍵會產生「a」(或搭配 Shift 或 CapsLock 鍵的「A」)。對於其他鍵盤配置,key
值可以是 "й"
、"ض"
、"ㅂ"
、"た"
或其他字元。回到先前的遊戲範例,如果您希望遊戲使用 WASD 鍵進行移動,可以使用 code
屬性,並檢查 "KeyW"
、"KeyA"
、"KeyS"
和 "KeyD"
。這項功能適用於所有鍵盤和版面配置,甚至是會互換「w」和「z」鍵位置的 AZERTY 鍵盤。
虛擬鍵盤
您會發現,到目前為止,我們一直著重於實體鍵盤的行為。使用者在虛擬鍵盤或其他輸入裝置上輸入內容時,會如何處理?規格提供 code
屬性的官方指南。總而言之,模仿標準鍵盤配置的虛擬鍵盤應會設定適當的 code
屬性,但採用非傳統配置的虛擬鍵盤可能完全不會設定 code
。
key
屬性則較為直觀,您應該會將其設為字串,並根據使用者 (虛擬) 輸入的字元。
立即試用
Gary Kačmarčík 製作了精彩的示範,可視覺化顯示與 KeyboardEvent
相關聯的所有屬性:

跨瀏覽器支援
截至本文撰寫時,code
屬性僅支援 Chrome 48 以上版本、Opera 35 以上版本和 Firefox 44 以上版本。key
屬性則支援 Firefox 44 以上版本、Chrome 51 以上版本和 Opera 38 以上版本,且在 Internet Explorer 9 以上版本和 Edge 13 以上版本中部分支援。