当我按键盘上字母上方的数字按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等。
答案 0 :(得分:0)
Ascii代码和字符代码是两个不同的东西。小键盘'8'的字符代码为104,'h'为72.每个键的编号都不同,因此h将始终为72.
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();
}