onkeydown

义项:JavaScript键盘按下事件
onkeydown

onkeydown是超文本标记语言(HTML)与JavaScript中的一种键盘事件处理属性,当用户在页面上按下某个键时触发,其对应的事件对象类型为KeyboardEvent。它与onkeypress、onkeyup共同构成键盘事件序列,但只有它对所有按键都生效,包括方向键、功能键与组合键,因此在实现快捷键和键盘操作交互时被广泛采用。该属性自DOM Level 2起成为标准特性,主流浏览器均已支持。

目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

onkeydown指的是网页文档对象模型(DOM)中表示「某个键被按下」的事件,以及绑定该事件的处理属性。在HTML中它可以写成元素属性,在脚本中则通过对象属性或事件监听方法注册,处理函数接收到一个KeyboardEvent类型的对象[1][2]。

该事件在按键被按下时立即触发,并在同一按键的keyup事件之前发出;若浏览器仍支持旧的keypress事件,其顺序是先keydown、再keypress、最后keyup[3][4]。它与按键产生的字符无关,因此只反映物理按键的按下动作[1]。

该事件会冒泡,并且可以被取消,取消后按键原本的默认行为不再执行[2][5]。

原理

键盘事件由输入设备和操作系统的键位映射共同决定,用户按下某个物理键后,浏览器完成映射,然后派发keydown事件[6]。事件对象提供多个只读属性用于识别按键:key给出按键的字符值,code给出物理位置对应的代码,以及ctrlKey、shiftKey、altKey、metaKey等修饰键状态和repeat、isComposing等标志[1]。

事件流遵循捕获、目标、冒泡三个阶段,因此可以在任意祖先元素上监听并按需阻断传播;调用取消默认行为的方法即可阻止按键的原本效果[1]。一个常见的判断逻辑可表示为:$\text{按键} = f(\text{KeyboardEvent.key},\ \text{KeyboardEvent.code})$,其中前者随键盘布局变化,后者对应物理位置[1]。

在输入法组合输入阶段,keydown仍会派发,规范要求此时isComposing为真;事件边界处可能出现isComposing为假、但事件仍属于组合过程的情况,此时keyCode常为229,可作为兼容判断的补充[7][1]。

发展历程

早期浏览器各自扩展键盘事件处理,微软的Internet Explorer 4.0起支持该事件,但当时无法取消;到Internet Explorer 5,可取消的按键范围扩大到退格键、方向键、翻页键、字母数字以及常用符号等[5]。

随着标准推进,该事件被纳入DOM Level 2规范(2001年),此后各大浏览器均实现支持[2]。各国浏览器厂商在键码取值上长期存在分歧,旧有的keyCode、charCode、which等属性因此被标准标注为遗留特性,规范建议改用key与code[4][8]。

与之并列的keypress事件逐步被弃用,规范推荐以beforeinput与input事件处理文本输入,keydown因而成为识别任意按键的主要途径[4][2]。从Firefox 65起,keydown与keyup在输入法组合期间也会派发,以改善中日韩等文字输入场景的跨浏览器一致性[1]。

应用

最常见的用途是绑定键盘快捷键与全局热键,例如组合Ctrl键与某个字母键触发特定操作,页面通过修饰键属性判断组合状态[9][10]。在表单校验中,可在该事件中筛掉不允许输入的字符,或拦截回车键提交、Esc键关闭弹层等默认行为[10][9]。

它也用于以方向键控制界面的移动操作,以及为可访问性场景提供纯键盘导航能力,让无法使用鼠标的用户完成同样的交互[10][1]。

局限

该事件只反映按键动作,不能直接说明用户最终输入了什么文本。规范指出它位于键位映射之后、输入法处理之前,因此带输入法的复杂文字输入、手写与语音等输入方式未必产生对应的键盘事件[6][11]。处理文本输入时应改用input等输入类事件。

历史遗留属性带来跨平台不一致。keyCode的取值依赖系统与实现,可打印字符尤其在与Shift、Alt组合时缺乏稳定性,不同浏览器甚至不同键盘布局下可能给出不同数值,因此新代码不宜依赖它[8][4]。此外,键盘事件仅在可聚焦元素或具备相应属性的组件上产生,否则不会触发[1]。

长按某键会导致该事件连续重复触发,需要在逻辑中区分首次按下与自动重复;取消该事件的默认行为在各浏览器上的后果也不完全一致,可能影响后续字符输入[12][10]。

参见

  • onkeyup —— 按键松开时触发的对应键盘事件。

  • onkeypress —— 主要用于捕获字符输入的旧式键盘事件,已被弃用。

  • KeyboardEvent —— 键盘事件对象的接口,承载按键与修饰键信息。

  • 事件冒泡 —— 键盘事件在文档树中传播的机制。

  • 输入法编辑器 —— 影响组合输入期间键盘事件行为的输入系统。

参考资料

  1. Element:keydown 事件 [引用日期2026-10-29]
  2. onkeydown Event [引用日期2026-10-29]
  3. onkeydown 事件-JavaScript 和 HTML DOM 参考手册-w3cschool [引用日期2026-10-29]
  4. UI Events - Comma | "," | 188 [引用日期2026-10-29]
  5. aa742906(v=vs [引用日期2026-10-29]
  6. Document Object Model (DOM) Level 3 Events Specification [引用日期2026-10-29]
  7. w3.org 上的网页 [引用日期2026-10-29]
  8. KeyboardEvent.keyCode - 此页面由社区从英文翻译而来 [引用日期2026-10-29]
  9. 8-2 捕捉鍵盤與滑鼠事件 [引用日期2026-10-29]
  10. title: 44-键盘事件 [引用日期2026-10-29]
  11. KeyboardEvent [引用日期2026-10-29]
  12. ff928319(v=msdn [引用日期2026-10-29]
词条评价
词条统计

浏览次数:2 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-28T18:34:19Z

历史版本

本条目引用的词条
onkeyup onkeypress KeyboardEvent 事件冒泡 输入法编辑器