2012-04-17 60 views
31

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

+0

您正在使用哪种浏览器? – Mathletics 2012-04-17 12:56:10

+0

不同的浏览器应该导致不同的事件,但不是不同的键盘命令 – SpYk3HH 2012-04-17 12:56:40

+0

我有一个json对象,每个键盘事件都被浏览器分开,我会用三个按键真正快速地发布它,我们可以测试这个,10分钟的噱头 – SpYk3HH 2012-04-17 12:57:30

回答

2

KeyPress发生在KeyDown之后。所以你可以使用KeyDown来确定它的密钥,然后KeyPress禁止该字符。

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-upkeyCode包含关键信息。“

+0

是的,所以这就是为什么我对此感到困惑? – ChrisMJ 2012-04-17 14:26:25

+0

以及jbl在他的回答中指出,[这个页面](http://javascript.info/tutorial/keyboard-events)只是稍微描述了这个问题,但它似乎还没有回答整个问题。也许我错误地阅读了页面,但是在某一点上它仍然指出charcode被拉到两个页面,只是一个会产生不同的值。也许在一些老版本的js文档中找到答案。我现在看,也将重新我的对象,包括按键差异 – SpYk3HH 2012-04-17 15:06:50

+0

虽然我会建议避免按键,因为它不会像可预测的事件作为keydown和keyup – SpYk3HH 2012-04-17 15:08:16

5

在正常情况下,去keyup

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

原因:

  1. ​​保持当用户拿着钥匙向下射击,而keypresskeyup火一次
  2. keypress未检测到特殊键(例如SHIFT),​​和keyup呢。