jQuery .keypress& .keydown .which

时间:2012-04-17 12:50:58

标签: javascript jquery keyboard keypress keydown

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

5 个答案:

答案 0 :(得分:22)

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

keydownkeyup谈论哪些 密钥 已更改。 keypress告诉该密钥代表哪个 字符

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

请参阅this article about the differences between the key events as implemented on various browsers

答案 1 :(得分:21)

我会d $%^ @ d,与按键确实存在差异,这一次我从未意识到。大声笑

看到我的小提琴,尝试类似字母“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包含关键信息。“

答案 2 :(得分:14)

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

  

Keydown在任何按键时触发并提供扫描码。   Keydress在keydown之后触发并提供char代码,但只保证字符键。

答案 3 :(得分:7)

在正常情况下,请转到keyup

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

原因:

    当用户按住键时,
  1. keydown会一直触发,而keypresskeyup只会触发一次。
  2. keypress未检测到特殊密钥(例如SHIFT),keydownkeyup

答案 4 :(得分:2)

KeyPress发生在KeyDown之后。因此,您可以使用KeyDown来确定它是什么密钥,然后使用KeyPress来禁止该角色。