2012-04-17 89 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呢。
相關問題