Javascript 获取小键盘(numpad)键的正确键码

Javascript 获取小键盘(numpad)键的正确键码,javascript,jquery,Javascript,Jquery,当按下键盘上的键[0..9](数字)时,我通过调用String.fromCharCode(event.keyCode)获取代码。 虽然这些代码对应于字符:'abcdefghi'而不是[0..9] 问题: 我在表单中有3个输入。仅允许用户在第一次输入中输入。当用户按下键盘上的键时,某些功能需要对其进行过滤,如果按下的键是数字,则将其写入第二输入,否则必须将其写入第三输入。如何纠正 使用按键处理程序: [somelement].onkeypress = function(e){ e = e ||

当按下键盘上的键[0..9](数字)时,我通过调用
String.fromCharCode(event.keyCode)
获取代码。 虽然这些代码对应于字符:'abcdefghi'而不是[0..9]

问题:

我在表单中有3个输入。仅允许用户在第一次输入中输入。当用户按下键盘上的键时,某些功能需要对其进行过滤,如果按下的键是数字,则将其写入第二输入,否则必须将其写入第三输入。如何纠正


使用
按键处理程序:

[somelement].onkeypress = function(e){
  e = e || event;
  console.log(String.fromCharCode(e.keyCode));
}
另见:


如果要使用
keyup
keydown
处理程序,可以从
e.keyCode
中减去48以获得数字(因此
String.fromCharCode(e.keyCode-48)

如果由于事件取消需要等原因,按键不可用,则有一种使用keydown的方法。在此测试中使用if()语句:

parseInt(event.keyIdentifier.substring(2),16) > 47 && parseInt(event.keyIdentifier.substring(2),16) < 58
parseInt(event.keyIdentifier.substring(2,16)>47&&parseInt(event.keyIdentifier.substring(2,16)<58
或者,对于jQuery事件:

parseInt(event.originalEvent.keyIdentifier.substring(2),16) > 47 && parseInt(event.originalEvent.keyIdentifier.substring(2),16) < 58
parseInt(event.originalEvent.keyIdentifier.substring(2,16)>47&&parseInt(event.originalEvent.keyIdentifier.substring(2,16)<58
这些示例假定“事件”是键控事件。keyIdentifier是一个十六进制数,表示相关字符的unicode值。使用keyIdentifier,来自numberpad/keypad的数字和QWERTY键盘上方的数字都将具有相同的值,即48-57(U+0030-U+0039),即使使用keyDown事件也是如此


浏览器中的Unicode值看起来像U+0030或U+002F。解析此字符串以仅获取十六进制值,然后使用基数为16的parseInt()将其转换为base-10。

onKeyPress处的event.charCode在按键盘和小键盘上的数字时返回相同的代码。 但是onKeyDown(或up)处的event.keyCode返回不同的代码。 =>获取字符:在onKeyPress事件中使用event.charCode
event.preventDefault()(或IE上的event.returnValue=false)在onKeyDown事件中使用event.keyCode进行编号。但在Firfox壁虎身上它不起作用。我使用下面的代码,我很满意:)


我使用下面的javascript代码修复了这个问题。numpad键位于
96
105
之间。但实数与numpad值的差值小于
48
。使用keyup或keydown处理程序

var keyCode = e.keyCode || e.which;
if (keyCode >= 96 && keyCode <= 105) {
  // Numpad keys
  keyCode -= 48;
}
var number = String.fromCharCode(keyCode);
var-keyCode=e.keyCode | e.which;

如果(keyCode>=96&&keyCode我认为更安全的方法是不假设将使用的值键。您可以通过KeyboardEvent对象获取工作值并访问其属性“DOM_VK_*”。让我给您举个例子

 const kcN0=KeyboardEvent.DOM_VK_0;//get the 0 key value (commonly,48)
 const kcN9=KeyboardEvent.DOM_VK_9;//get the 9 key value (commonly, 57)
 const kcNPad0=KeyboardEvent.DOM_VK_NUMPAD0;//get the NUMPAD 0 key value (commonly,96)
 const kcNPad9=KeyboardEvent.DOM_VK_NUMPAD9;//get the NUMPAD 9 key value (commonly,105)
 const kcNPad_L=KeyboardEvent.DOM_KEY_LOCATION_NUMPAD;//get the key location of NUMPAD (commonly, 3)
并计算事件变量“kbEv”

按keyCode=(kbEv.which | kbEv.keyCode);

如果(kbEv.location===kcNPad|L&&pressKeyCode>=kcNumP0&&pressKeyCode我使用您的代码和Opera作为浏览器获得48到57之间的值。这意味着什么e=e | |事件?在大多数浏览器中,键事件被发送到处理程序。在Internet Explorer中不是这样。该行的意思是:从处理程序函数的参数中获取给定的事件e,如果如果为false或null,请使用全局对象的事件(即
窗口
)。+1添加注释:-)。而且你的代码很好用。但没什么问题。我会在五秒钟后发送。谢谢你的-48提示。为什么会根据触发的事件使用不同的按键代码。我在键盘上使用相同的按键!效果很好,但只在Chrome中使用(不在FF、IE或Edge中使用-不确定Safari).
keyIdentifier
仅出现在规范草案中,此后已被弃用()。这是一个很好的解决方案,因为
backspace
不会使用keypress拾取。
 const kcN0=KeyboardEvent.DOM_VK_0;//get the 0 key value (commonly,48)
 const kcN9=KeyboardEvent.DOM_VK_9;//get the 9 key value (commonly, 57)
 const kcNPad0=KeyboardEvent.DOM_VK_NUMPAD0;//get the NUMPAD 0 key value (commonly,96)
 const kcNPad9=KeyboardEvent.DOM_VK_NUMPAD9;//get the NUMPAD 9 key value (commonly,105)
 const kcNPad_L=KeyboardEvent.DOM_KEY_LOCATION_NUMPAD;//get the key location of NUMPAD (commonly, 3)