2011-11-30 33 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(); 
} 
相关问题