JavaScript键盘事件监听详解:keyup、keydown与keypress的区别及兼容性处理

作者:竹影

时间:2026-10-24

浏览:622

本文详细解析JavaScript中keyup、keydown和keypress三种键盘事件的区别与触发时机,重点说明keypress在移动端及安卓系统的兼容性问题,推荐使用addEventListener。通过eve对象获取按键信息时,建议结合keyCode或which属性提升跨浏览器兼容性,并提供从Unicode码转换为字符的实用代码示例。

文章目录

JavaScript键盘事件监听概述

在开发网页应用时,经常需要捕获用户的键盘输入行为,下面将介绍具体的实现方法。

键盘事件监听方式与类型对比

监听方式

键盘事件通常需要在整个文档层面进行全局监听,假设定义的监听函数名为keyboard()。

首先是keyup事件类型。该事件的触发条件是用户按下某个按键后将其松开。

//长按并松开只触发一次 document.addEventListener('keyup', keyboard); document.onkeyup = keyboard; //记得不要加括号!

其次是keydown事件类型。该事件的触发条件是用户按下某个按键的瞬间。

//长按可以触发多次 document.addEventListener('keydown', keyboard); document.onkeydown = keyboard;

最后是keypress事件类型。该事件的触发条件是用户按下按键且系统成功生成了对应的字符。

//长按可以触发多次 //遇到'1','a',回车等按键可以触发,但del键,向上键等则不会 document.addEventListener('keypress', keyboard); document.onkeypress = keyboard;

需要特别注意:keypress事件的浏览器兼容性较差,例如在安卓系统上可能不支持,因此建议尽量避免使用。在onkey___系列属性和addEventListener方法之间,优先选择后者以确保更好的兼容性。

此外,如果keyboard函数不接收参数,那么监听到的将是任何符合触发条件的按键,即只要用户按下键盘上的任意键,事件就会被触发。

获取具体按键信息的方法

监听具体事件(即按了哪个键)

前文提到的keyboard函数可以定义形参,但在实际调用时不需要传入实参。

function keyboard(eve) { ... } document.onkeyup = keyboard; //不需要加参数和括号

此时,eve变量即为键盘事件类型的对象,它包含以下属性:

属性 意义
key 事件对应按钮的字符
keyCode 事件对应按钮的Unicode码
which 事件对应按钮的Unicode码

其中,不同浏览器对keyCode和which属性的支持情况存在差异,下文将介绍提升兼容性的具体方法。

举个例子:


<p id="msg1"></p>
<p id="msg2"></p>

<script>
	function keyboard(eve) {
		msg1.textContent += eve.key;
		msg2.textContent += eve.keyCode || eve.which;
 		//该方法可以提升代码的兼容性
	}
	document.onkeyup = keyboard;
</script>

input: a

output: a 65

兼容性处理与字符转换技巧

需要注意的是:key属性的兼容性并不理想,最佳实践是先获取Unicode码,再将其转换为对应的字符。

let x = eve.keyCode || eve.which; let key = String.fromCharCode(x);

如果想查询某个按键对应的Unicode码,可以查阅相关手册,或者在浏览器控制台中进行测试。对于简单场景,也可以参考ASCII码表(https://www.runoob.com/tags/html-ascii.html)作为替代方案。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章