元素:keyup 事件
keyup
事件在释放键时触发。
keydown
和 keyup
事件提供了一个代码,指示按下哪个键,而 keypress
指示输入了哪个字符。例如,小写字母“a”将由 keydown
和 keyup
报告为 65,但由 keypress
报告为 97。大写字母“A”由所有事件报告为 65。
键盘事件的事件目标是当前正在处理键盘活动的焦点元素。 这包括:<input>
、<textarea>
、任何具有contentEditable
属性的元素,以及任何可以与键盘交互的元素,例如 <a>
、<button>
和 <summary>
。 如果没有合适的元素处于焦点状态,则事件目标将是 <body>
或根元素。 如果事件没有被捕获,它将冒泡到DOM 树中,直到到达 Document
。
事件目标可能会在不同的键盘事件之间发生变化。 例如,按 Tab 键时的 keydown
目标将不同于 keyup
目标,因为焦点已发生改变。
语法
在像 addEventListener()
这样的方法中使用事件名称,或者设置事件处理程序属性。
addEventListener("keyup", (event) => {});
onkeyup = (event) => {};
事件类型
一个 KeyboardEvent
。 继承自 UIEvent
和 Event
。
事件属性
此接口也继承了其父类 UIEvent
和 Event
的属性。
KeyboardEvent.altKey
只读-
返回一个布尔值,如果在生成键盘事件时 Alt (Option 或 macOS 上的 ⌥) 键处于活动状态,则为
true
。 KeyboardEvent.code
只读-
返回一个字符串,其中包含事件所代表的物理键的代码值。
警告: 这会忽略用户的键盘布局,因此如果用户在 QWERTY 键盘布局中的“Y”位置按下键(在主行上方的中间位置附近),即使用户使用 QWERTZ 键盘(这将意味着用户期望是“Z”,而所有其他属性都将指示是“Z”)或 Dvorak 键盘布局(用户将期望是“F”),它也会始终返回“KeyY”。 如果你想向用户显示正确的按键,可以使用
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
值。
<input placeholder="Click here, then press and release a key." size="40" />
<p id="log"></p>
const input = document.querySelector("input");
const log = document.getElementById("log");
input.addEventListener("keyup", logKey);
function logKey(e) {
log.textContent += ` ${e.code}`;
}
keyup 事件与 IME
从 Firefox 65 开始,keydown
和 keyup
事件现在在 IME 组成期间触发,以提高 CJKT 用户的跨浏览器兼容性 (Firefox 错误 354358)。 要忽略所有作为组成部分的 keyup
事件,请执行以下操作
eventTarget.addEventListener("keyup", (event) => {
if (event.isComposing) {
return;
}
// do something
});
注意: 不同于 keydown
,keyup
事件没有用于 IME 事件的特殊 keyCode
值。 但是,与 keydown
类似,compositionstart
可能会在输入打开 IME 的第一个字符时在 keyup
之后触发,而 compositionend
可能会在输入关闭 IME 的最后一个字符时在 keyup
之前触发。 在这些情况下,即使事件是组成部分,isComposing
也是 false。
规范
规范 |
---|
UI 事件 # event-type-keyup |
HTML 标准 # handler-onkeyup |
浏览器兼容性
BCD 表仅在启用 JavaScript 的浏览器中加载。