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

浏览器兼容性

另见