jQuery:event.which在从numpad按下数字时以及从字母表上方的数字键中返回不同的代码

时间:2011-11-30 07:51:43

标签: jquery which fromcharcode

当我按键盘上字母上方的数字按8时,event.which返回56,但是当我从侧面给出的小键盘按8时,它返回104('h'的ascii)。我这样做了:

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中捕获delete,tab等。

2 个答案:

答案 0 :(得分:0)

Ascii代码和字符代码是两个不同的东西。小键盘'8'的字符代码为104,'h'为72.每个键的编号都不同,因此h将始终为72.

Character Codes

Jquery Docs JQuery event.which

中有一个很好的例子

答案 1 :(得分:0)

有一种更好的方法可以检测JavaScript / jQuery中按下了哪个键。

首先,一般来说,keydown事件在获取所需的所有键时更有效,因为按键不一定会在ENTER,ESC,TAB,箭头键等上触发。

要从数字键盘或QWERTY键盘上方的数字行检测数字,请使用:

event.keyIdentifier

或者,使用jQuery包装事件:

event.originalEvent.keyIdentifier
这些示例中的

“event”是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();
}