12

下一个示例代码在我按住按钮时多次输出“keydown”消息。文档keydown 事件发生一次,只需按一下按钮。因此,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 上对其进行了测试。我还创建了一个小提琴(问题可以重现)。重现问题的 JQuery 版本:1.8.2、1.9.1。

更新。

我确实意识到了这个问题:如何避免 JavaScript 中自动重复的 keydown 事件?.

4

4 回答 4

29

keydown事件在按键被按下时发生,紧随其后的是keypress事件。然后在keyup释放键时生成事件。

为了理解 和 之间的区别keydownkeypress了解“字符”和“键”之间的区别很有用。“键”是计算机键盘上的物理按钮,而“字符”是通过按下按钮键入的符号。理论上,keydownandkeyup事件代表按键被按下或释放,而keypress事件代表一个字符被输入。该理论的实现在所有浏览器中并不相同。

于 2013-03-09T12:31:35.643 回答
11

非字符键不会引发 KeyPress 事件;但是,非字符键确实会引发 KeyDown 和 KeyUp 事件。

关键事件按以下顺序发生:

  1. 按键
  2. 按键
  3. 键升

这些事件在窗口、文档、表单、可聚焦元素
测试页上是否可用

于 2013-03-09T12:35:02.410 回答
1

keydown 事件在按键被按下时发生,紧随其后的是 keypress 事件。

于 2013-03-09T12:30:15.023 回答
1

我在这里有答案,慢慢地跟着我:: keydown当您开始键入键或开始更改某些内容时工作,并且 keydown 为您提供一次结果,但在最后一个结果之前给您结果而不是最后一个结果。 keyup:当您停止键入键或返回(更改诸如删除字符之类的内容)时工作,它会给您最后的结果。 keypress:当您开始键入 key 但未开始更改某些内容时工作,并且 keydpress 为您提供一次结果,但在最后一次之前为您提供结果,(lastResult - 1)

于 2016-01-07T19:15:13.690 回答