37

好的,.keypress 和 .keydown/.keyup 有什么区别?目前我正在使用 .keydown ,它为我的键返回 38 的 .which 值,现在如果我将其更改为 .keypress 它为同一个键返回 109 的值。有什么区别,为什么同一个键的值不同?

4

5 回答 5

23

如果你按下一个按钮,它会触发 akeydown并释放它会触发 a keyupkeypress通常介于这两者之间。

keydownkeyup讨论哪个已更改。keypress告诉该键代表哪个字符。

请注意,这完全取决于浏览器!

请参阅这篇文章,了解在各种浏览器上实现的关键事件之间的差异

于 2012-04-17T13:02:27.327 回答
21

我会成为 d$%^@d,keypress 确实有区别,而我一直没有意识到。哈哈

看看我的小提琴并尝试像字母“r”这样的东西

http://jsfiddle.net/SpYk3/NePCm/

不知怎的,我从来没有注意过这个

找到更多信息:

http://www.quirksmode.org/js/keys.html

“这两个属性是keyCodecharCode。简单地keyCode说,就是用户按下的实际键盘键,同时charCode给出结果字符的 ASCII 值。这些信息位不必相同;例如,小写'a' 和大写的 'A' 具有相同的keyCode,因为用户按下相同的键,但charCode由于结果字符不同而不同。

Explorer 和 Opera支持charCode。但是,它们在 中提供字符信息keyCode,但仅在 中提供onkeypressonkeydown-up keyCode包含关键信息。”

于 2012-04-17T13:24:23.503 回答
14

您应该阅读以下帖子:http: //javascript.info/tutorial/keyboard-events

Keydown 触发任何按键并提供扫描码。Keypress 在 keydown 后触发并提供字符代码,但仅保证字符键。

于 2012-04-17T13:00:06.813 回答
9

在正常情况下,请选择keyup

$(document).keyup(function(e){
  console.log(e.which);
});

原因:

  1. keydown当用户按住键时会一直触发,而keypresskeyup触发一次。
  2. keypress不检测特殊键(例如SHIFT),keydown而是检测keyup
于 2014-07-31T02:51:07.380 回答
2

KeyPress 发生在 KeyDown 之后。因此,您可以使用 KeyDown 来确定它是什么键,然后使用 KeyPress 来禁止该字符。

于 2012-04-17T12:56:11.710 回答