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 |
浏览器兼容性
加载中…