Element: keyup 事件

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

當按鍵釋放時,會觸發 keyup 事件。

keydownkeyup 事件提供了一個程式碼,指示按下了哪個鍵,而 keypress 則指示輸入了哪個字元。例如,小寫字母 "a" 將被 keydownkeyup 報告為 65,但被 keypress 報告為 97。大寫字母 "A" 則被所有事件報告為 65。

按鍵事件的事件目標是當前正在處理鍵盤活動的焦點元素。這包括:<input><textarea>、任何 contentEditable 的內容,以及任何其他可以透過鍵盤互動的元素,例如 <a><button><summary>。如果沒有合適的元素獲得焦點,事件目標將是 <body> 或根元素。事件會冒泡。它可以到達 DocumentWindow

事件目標可能會在不同的按鍵事件之間發生變化。例如,按下 Tab 鍵時的 keydown 目標將與 keyup 目標不同,因為焦點已經改變。

語法

在諸如 addEventListener() 之類的方法中使用事件名稱,或設定事件處理程式屬性。

js
addEventListener("keyup", (event) => { })

onkeyup = (event) => { }

事件型別

一個 KeyboardEvent。繼承自 UIEventEvent

Event UIEvent KeyboardEvent

事件屬性

此介面還繼承其父級 UIEventEvent 的屬性。

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 keyup 示例

當你在 <input> 元素內釋放一個鍵時,此示例會記錄 KeyboardEvent.code 值。

html
<input placeholder="Click here, then press and release a key." size="40" />
<p id="log"></p>
js
const input = document.querySelector("input");
const log = document.getElementById("log");

input.addEventListener("keyup", logKey);

function logKey(e) {
  log.textContent += ` ${e.code}`;
}

IME 的 keyup 事件

自 Firefox 65 起,keydownkeyup 事件現在在輸入法編輯器合成期間觸發,以改善 CJKT 使用者的跨瀏覽器相容性(Firefox bug 354358)。要忽略所有作為合成一部分的 keyup 事件,請執行以下操作:

js
eventTarget.addEventListener("keyup", (event) => {
  if (event.isComposing) {
    return;
  }
  // do something
});

注意:keydown 不同,keyup 事件沒有 IME 事件的特殊 keyCode 值。然而,與 keydown 類似,當輸入第一個字元開啟 IME 時,compositionstart 可能會在 keyup 之後觸發;當輸入最後一個字元關閉 IME 時,compositionend 可能會在 keyup 之前觸發。在這些情況下,即使事件是合成的一部分,isComposing 也為 false。

規範

規範
UI 事件
# event-type-keyup
HTML
# handler-onkeyup

瀏覽器相容性

另見