Element: keydown 事件
當按下某個鍵時,會觸發 keydown 事件。
與已廢棄的 keypress 事件不同,keydown 事件會為所有鍵觸發,無論它們是否生成字元值。
keydown 和 keyup 事件提供一個表示按下了哪個鍵的程式碼,而 keypress 表示輸入了哪個字元。例如,小寫字母“a”將由 keydown 和 keyup 報告為 65,但由 keypress 報告為 97。大寫字母“A”將由所有事件報告為 65。
按鍵事件的事件目標是當前正在處理鍵盤活動的焦點元素。這包括:<input>、<textarea>、任何 contentEditable 的元素,以及其他可以透過鍵盤進行互動的元素,例如 <a>、<button> 和 <summary>。如果沒有合適的元素獲得焦點,事件目標將是 <body> 或根元素。該事件會冒泡。它可以到達 Document 和 Window。
不同的按鍵事件之間,事件目標可能會改變。例如,按下 Tab 鍵的 keydown 目標將與 keyup 目標不同,因為焦點已改變。
語法
在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。
addEventListener("keydown", (event) => { })
onkeydown = (event) => { }
事件型別
一個 KeyboardEvent。繼承自 UIEvent 和 Event。
事件屬性
此介面還繼承其父級 UIEvent 和 Event 的屬性。
KeyboardEvent.altKey只讀-
返回一個布林值,如果生成按鍵事件時 Alt 鍵(macOS 上為 Option 或 ⌥ 鍵)處於活動狀態,則返回
true。 KeyboardEvent.code只讀-
返回一個字串,其中包含事件所代表的物理鍵的程式碼值。
警告: 這會忽略使用者的鍵盤佈局,因此如果使用者在 QWERTY 鍵盤佈局中按下 "Y" 位置的鍵(在主行上方一行的中間附近),這將始終返回 "KeyY",即使使用者使用的是 QWERTZ 鍵盤(這意味著使用者期望一個 "Z",所有其他屬性也將指示一個 "Z")或 Dvorak 鍵盤佈局(使用者期望一個 "F")。如果你想向用戶顯示正確的按鍵,可以使用
Keyboard.getLayoutMap()。 KeyboardEvent.ctrlKey只讀-
返回一個布林值,如果生成按鍵事件時 Ctrl 鍵處於活動狀態,則返回
true。 KeyboardEvent.isComposing只讀-
返回一個布林值,如果事件在
compositionstart之後和compositionend之前觸發,則返回true。 KeyboardEvent.key只讀-
返回一個字串,表示事件所代表的鍵的鍵值。
KeyboardEvent.location只讀-
返回一個數字,表示鍵盤或其他輸入裝置上按鍵的位置。標識位置的常量列表顯示在鍵盤位置中。
KeyboardEvent.metaKey只讀-
返回一個布林值,如果生成按鍵事件時 Meta 鍵(Mac 鍵盤上的 ⌘ Command 鍵;Windows 鍵盤上的 Windows 鍵 (⊞))處於活動狀態,則返回
true。 KeyboardEvent.repeat只讀-
返回一個布林值,如果按鍵被按住並自動重複,則返回
true。 KeyboardEvent.shiftKey只讀-
返回一個布林值,如果生成按鍵事件時 Shift 鍵處於活動狀態,則返回
true。
示例
addEventListener keydown 示例
此示例會在您按下 <input> 元素內的任意鍵時記錄 KeyboardEvent.code 值。
<input placeholder="Click here, then press down a key." size="40" />
<p id="log"></p>
const input = document.querySelector("input");
const log = document.getElementById("log");
input.addEventListener("keydown", logKey);
function logKey(e) {
log.textContent += ` ${e.code}`;
}
帶有 IME 的 keydown 事件
自 Firefox 65 起,keydown 和 keyup 事件現在在輸入法編輯器組合期間觸發,以改善 CJKT 使用者的跨瀏覽器相容性(Firefox bug 354358)。要忽略所有屬於組合部分的 keydown 事件,請執行以下操作(229 是與已被 IME 處理的事件相關的 keyCode 的特殊值):
eventTarget.addEventListener("keydown", (event) => {
if (event.isComposing || event.keyCode === 229) {
return;
}
// do something
});
注意:當輸入第一個字元以開啟 IME 時,compositionstart 可能會在 keydown 之後觸發;當輸入最後一個字元以關閉 IME 時,compositionend 可能會在 keydown 之前觸發。在這些情況下,即使事件是組合的一部分,isComposing 也為 false。但是,KeyboardEvent.keyCode 在這些情況下仍然是 229,因此仍然建議檢查 keyCode,儘管它已棄用。
規範
| 規範 |
|---|
| UI 事件 # 事件型別-keydown |
| HTML # 處理程式-onkeydown |
瀏覽器相容性
載入中…