2011-11-30 39 views
1

當我從鍵盤上的字母上面的數字按8,event.which返回56,但是當我按下側面給出的數字鍵盤上的8,它返回104('h'ascii)。我這樣做:jQuery:event.which返回不同的代碼時,從數字鍵盤按下一個數字,當從數字鍵上面按字母時

var keyPressed = event.which; 
String.fromCharCode(keyPressed); // returns 8 from keyboard, 'h' from keypad 

我這樣做的處理程序中的的keydown事件。現在,我知道鍵盤上的每個鍵都有一個不同的keyCode,並且可能是event.which返回numpad 8的keyCode,這恰好與ascii'h'一致。我只想要返回8個,不管從哪裏輸入。

此外,我不能將上述代碼綁定到keyPress事件處理程序,因爲它不捕獲IE中的刪除,製表符等。

回答

0

ASCII代碼和字符代碼是兩個獨立的東西。數字鍵盤「8」中的104中的字符代碼的結果,「H」是72.每個鍵具有不同數量的,因此h會永遠是72

Character Codes

有一個在Jquery的文檔一個很好的例子JQuery event.which

+0

謝謝,但我希望8返回時,我按8從數字鍵盤。我怎樣才能做到這一點? – Daud

+0

我想你必須檢查數字鍵盤上的8位密鑰並返回所需的「真實」值。 if(e.keyCode == 56)return 8;'EDIT:'if(e.keyCode> = 48 && e.keycode <= 57)return parseInt(e.keyCode-48);' – OptimusCrime

0

有一個更好的方法來檢測在JavaScript/jQuery中按下哪個鍵。

首先,在一般的說明,keydown事件是在得到你想要的所有鍵更有效,因爲按鍵並不一定會火上ENTER,ESC,TAB,箭頭鍵等

要檢測從任一數字鍵盤或QWERTY鍵盤上面的數字的行號,可使用:

event.keyIdentifier 

,或者用jQuery包裹的事件:在這些examp

event.originalEvent.keyIdentifier 

「事件」 les是keydown事件對象。

這會給你代表的關鍵實際字符Unicode字符串值:

U + 002F或U + 0035,例如。然後,解析這個unicode值作爲十六進制數:

parseInt(event.keyIdentifier.substring(2),16) 

使用16作爲parseInt函數基數將十六進制數變換爲基-10。

使用此方法,所有數字鍵將具有相同的值,無論它們來源於數字鍵盤還是QWERTY鍵盤。數字0 - 9是48 - 57.因此,像這樣的if()語句將查找所有數字:

if (parseInt(event.keyIdentifier.substring(2),16) > 47 && parseInt(event.keyIdentifier.substring(2),16) < 58) { 
    doSomething(); 
} 
相關問題