当我按住按钮时,下一个示例代码多次输出'keydown'消息。只需按一下按钮就可以执行keydown事件的文档says。因此,keydown事件的工作方式与下一个示例中的keypress事件类似。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title></title>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript'>
function onLoad()
{
$( '#text' ).on( 'keydown', function() { console.info( 'keydown' ) } );
}
</script>
</head>
<body onload='onLoad()'>
<input type='text' id='text'>
</body>
</html>
我在Windows,Firefox 19.0.2和Google Chrome 25.0.1364.152上进行了测试。我也创建了fiddle(问题可以复制)。重现问题的JQuery版本:1.8.2,1.9.1。
更新
我确实意识到了这个问题:How can I avoid autorepeated keydown events in JavaScript?。
答案 0 :(得分:26)
按下键时会发生
keydown
事件,紧接着是keypress
事件。然后,在释放密钥时会生成keyup
事件。为了理解
keydown
和keypress
之间的区别,理解“字符”和“键”之间的区别很有用。 “键”是计算机键盘上的物理按钮,而“字符”是通过按下按钮键入的符号。理论上,keydown
和keyup
事件表示按下或释放的键,而keypress
事件表示正在键入的字符。在所有浏览器中,该理论的实现并不相同。
答案 1 :(得分:11)
KeyPress事件不是由非字符键引发的;但是,非字符键确实引发了KeyDown和KeyUp事件。
关键事件按以下顺序发生:
Are these events available on the Window, Document, Form, focusable elements
Test Page
答案 2 :(得分:1)
按下键时会发生keydown事件,紧接着是按下按键事件。
答案 3 :(得分:1)
我在这里回答,慢慢跟着我:
keydown
:当您开始输入密钥或开始更改某些内容时工作,并且keydown会在一次按下时为您提供一个结果,但会在最后一个结果之前提供结果而不是最后结果。
keyup
:当您停止输入密钥或返回(更改删除字符等内容)时工作,它会给您最后的结果。
keypress
:当你开始键入键但没有开始改变某些东西时工作,而keydpress给你一个结果,但是在最后一个之前给你结果,(lastResult - 1)