为什么'keydown'事件就像'keypress'事件一样?

时间:2013-03-09 12:27:23

标签: javascript jquery

当我按住按钮时,下一个示例代码多次输出'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?

4 个答案:

答案 0 :(得分:26)

  

按下键时会发生keydown事件,紧接着是keypress事件。然后,在释放密钥时会生成keyup事件。

     

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

答案 1 :(得分:11)

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

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

  1. KeyDown
  2. KeyPress
  3. KeyUp
  4. 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)