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

当我按下按钮时,下一个示例代码多次输出’keydown’消息。 文档说 ,只需按一下按钮就会发生一次keydown事件。 因此,keydown事件的工作方式与下一个示例中的keypress事件类似。

       function onLoad() { $( '#text' ).on( 'keydown', function() { console.info( 'keydown' ) } ); }       

我在Windows,Firefox 19.0.2和Google Chrome 25.0.1364.152上进行了测试。 我也创造了一个小提琴 (问题可以复制)。 重现问题的JQuery版本:1.8.2,1.9.1。

更新。

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

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

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

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

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

  1. 的KeyDown
  2. 按键
  3. KEYUP

这些事件是否可用于窗口,文档,表单和可聚焦元素
测试页面

按下键时会发生keydown事件,紧接着是按下按键事件。

我在这里回答,慢慢地跟着我: keydown :当你开始输入键或开始改变某些东西时工作,keydown给你一个结果一次按,但在最后一个结果之前给你结果而不是最后结果。 keyup :当你停止输入一个键或者回去(改变像删除字符之类的东西)时工作,它会给你最后的结果。 keypress :当你开始键入键但没有开始改变某些东西时工作,keydpress给你一个结果,但是在最后一个之前给你结果,(lastResult – 1)