JavaScript键盘事件详解:keydown、keypress与keyup的区别及用法

作者:像素猫

时间:2026-10-22

浏览:314

本文详细解析JavaScript中的三种键盘事件:keydown、keypress和keyup。重点说明它们在触发时机、组合键捕获及大小写区分上的差异,并介绍event对象中ctrlKey、altKey、shiftKey、keyCode及charCode等关键属性的使用方法,帮助开发者准确处理键盘交互逻辑。

文章目录

本文通过具体实例介绍JavaScript中键盘事件的常用处理方法,供开发者参考学习。

JavaScript键盘事件类型

JavaScript主要涉及以下三种键盘事件:

keydown:在键盘按键被按下时触发。若按键持续按住,该事件会重复触发。此事件支持捕获组合键。

keypress:在按下非功能键时触发,通常在keydown之后发生。若按键持续按住,该事件也会重复触发。它仅能捕获单个字符键。

keyup:在键盘按键弹起时触发。此事件同样支持捕获组合键。

全局事件对象event属性

全局事件对象event提供了丰富的属性用于判断按键状态:

event.ctrlKey:布尔值,表示Ctrl功能键当前是否处于按下状态。

event.altKey:布尔值,表示Alt功能键当前是否处于按下状态。

event.shiftKey:布尔值,表示Shift功能键当前是否处于按下状态。

event.keyCode:返回当前按下按键的数字键码值。

event.charCode:返回非功能按键对应的ASCII码值,可用于区分字符的大小写。

String.fromCharCode(event.charCode):该静态方法可将ASCII码值转换为对应的字符字符串。

键盘事件注意事项

使用键盘事件时需注意以下关键点:

  • KeyDown事件触发后,不一定伴随KeyUp事件。例如,在KeyDown触发后若用户点击鼠标右键,KeyUp可能不会被触发。
  • 部分特殊按键如PrScrn(打印屏幕键),其KeyPress、KeyDown和KeyUp事件均无法被捕获。
  • KeyPress主要用于捕获ANSI字符,包括数字(含Shift+数字生成的符号)、字母(区分大小写)以及小键盘字符。它不捕获F1-F12、Shift、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、菜单键、开始键和方向键等功能键。
  • KeyDown和KeyUp事件的keyCode值会区分小键盘和主键盘的数字字符,而KeyPress事件不区分这两者,返回相同的ASCII码值。

keyCode key
8 BackSpace BackSpace
9 Tab Tab
12 Clear
13 Enter
16 Shift_L
17 Control_L
18 Alt_L
19 Pause
20 Caps_Lock
27 Escape Escape
32 space space
33 Prior
34 Next
35 End
36 Home
37 Left
38 Up
39 Right
40 Down
41 Select
42 Print
43 Execute
45 Insert
46 Delete
47 Help
48 0 equal braceright
49 1 exclam onesuperior
50 2 quotedbl twosuperior
51 3 section threesuperior
52 4 dollar
53 5 percent
54 6 ampersand
55 7 slash braceleft
56 8 parenleft bracketleft
57 9 parenright bracketright
65 a A
66 b B
67 c C
68 d D
69 e E EuroSign
70 f F
71 g G
72 h H
73 i I
74 j J
75 k K
76 l L
77 m M mu
78 n N
79 o O
80 p P
81 q Q at
82 r R
83 s S
84 t T
85 u U
86 v V
87 w W
88 x X
89 y Y
90 z Z
96 KP_0 KP_0
97 KP_1 KP_1
98 KP_2 KP_2
99 KP_3 KP_3
100 KP_4 KP_4
101 KP_5 KP_5
102 KP_6 KP_6
103 KP_7 KP_7
104 KP_8 KP_8
105 KP_9 KP_9
106 KP_Multiply KP_Multiply
107 KP_Add KP_Add
108 KP_Separator KP_Separator
109 KP_Subtract KP_Subtract
110 KP_Decimal KP_Decimal
111 KP_Divide KP_Divide
112 F1
113 F2
114 F3
115 F4
116 F5
117 F6
118 F7
119 F8
120 F9
121 F10
122 F11
123 F12
124 F13
125 F14
126 F15
127 F16
128 F17
129 F18
130 F19
131 F20
132 F21
133 F22
134 F23
135 F24
136 Num_Lock
137 Scroll_Lock
187 acute grave
188 comma semicolon
189 minus underscore
190 period colon
192 numbersign apostrophe
210 plusminus hyphen macron
211
212 copyright registered
213 guillemotleft guillemotright
214 masculine ordfeminine
215 ae AE
216 cent yen
217 questiondown exclamdown
218 onequarter onehalf threequarters
220 less greater bar
221 plus asterisk asciitilde
227 multiply division
228 acircumflex Acircumflex
229 ecircumflex Ecircumflex
230 icircumflex Icircumflex
231 ocircumflex Ocircumflex
232 ucircumflex Ucircumflex
233 ntilde Ntilde
234 yacute Yacute
235 oslash Ooblique
236 aring Aring
237 ccedilla Ccedilla
238 thorn THORN
239 eth ETH
240 diaeresis cedilla currency
241 agrave Agrave atilde Atilde
242 egrave Egrave
243 igrave Igrave
244 ograve Ograve otilde Otilde
245 ugrave Ugrave
246 adiaeresis Adiaeresis
247 ediaeresis Ediaeresis
248 idiaeresis Idiaeresis
249 odiaeresis Odiaeresis
250 udiaeresis Udiaeresis
251 ssharp question backslash
252 asciicircum degree
253 3 sterling
254 Mode_switch

测试范例

测试范例


<html>
  <body>
    <script type="text/javascript">
      function appendText(str) {
        document.body.innerHTML += (str+"<br/>");
      }
      document.onkeydown = function(){
        //如果长按的话,会持续触发keydown和keypress(如果有该事件的话)
        appendText("onkeydown");
        if(event.ctrlKey) {
          appendText("ctrlKey");
        }
        if(event.altKey) {
          appendText("altKey");
        }
        if(event.shiftKey) {
          appendText("shiftKey");
        }
        //无charCode属性,只有keypress才有该属性
        if(event.charCode) {
          appendText(String.fromCharCode(event.charCode));
        }
        if(event.keyCode) {
          appendText(event.keyCode);
        }
        //该语句只对chrome和edge有效,可以屏蔽keypress(只对chrome和edge浏览器有效)
        //event.returnValue = false;
      };
      document.onkeypress = function() {
        //keypress无法监听到组合键
        appendText("onkeypress");
        if(event.ctrlKey) {
          appendText("ctrlKey");
        }
        if(event.altKey) {
          appendText("altKey");
        }
        if(event.shiftKey) {
          appendText("shiftKey");
        }
        //charCode是字母的Unicode值
        if(event.charCode) {
          appendText(String.fromCharCode(event.charCode));
        }
      }
      document.onkeyup = function() {
        appendText("onkeyup");
      }
    </script>
  </body>
</html>

可使用在线HTML/CSS/JavaScript代码运行工具(如http://tools.jb51.net/code/HtmlJsRun)对上述代码进行测试,运行效果见下图:

JavaScript键盘事件类型

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

实用工具推荐

电子包浆

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

使用 ›
图片压缩

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

使用 ›
相关文章