获取正确的键盘(小键盘)键代码

| 按下键盘[0..9]上的键时,我正在获取代码[96..105] 这些代码与字符相对应:\'a b c d e f g h i \'而不是[0..9],同时尝试以这种方式获取代码“ 0” 题: 我有3个输入形式。用户只允许在第一个输入中输入。当用户按下键盘上的键时,如果按下的键是数字,则某些功能需要对其进行过滤并将其写入第二个输入,否则必须将其写入第二个输入。如何纠正?请参阅下面的链接,因为它描述了我已实现的所有流程和代码 这是我的代码     
已邀请:
使用
keypress
处理程序:
[somelement].onkeypress = function(e){
  e = e || event;
  console.log(String.fromCharCode(e.keyCode));
}
另请参阅:此W3C测试文档 如果要使用
keyup
keydown
处理程序,则可以从
e.keyCode
中减去48以得到数字(所以是
String.fromCharCode(e.keyCode-48)
)     
我使用以下JavaScript代码解决了该问题。小键盘的键位在96到105之间。但是实数比小键盘的值少48。与keyup或keydown处理程序一起使用。
    var keyCode = e.keyCode || e.which;
    if (keyCode >= 96 && keyCode <= 105) {
        // Numpad keys
        keyCode -= 48;
    }
    var number = String.fromCharCode(keyCode);
    
如果由于事件取消的需要而无法使用按键等,则可以使用keydown来执行此操作。在此测试中使用if()语句:
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
这些示例假定\“ event \”是keydown事件。 keyIdentifier是一个十六进制数字,代表相关字符的unicode值。使用keyIdentifier,即使发生keyDown事件,数字键盘/小键盘上的数字以及QWERTY键盘上方的数字也将具有相同的值48-57(U + 0030-U + 0039)。 浏览器中的Unicode值看起来像U + 0030或U + 002F。解析此字符串以仅获取十六进制值,然后使用基数为16的parseInt()将其转换为以10为基数。     
好。但是在Firfox Gecko中它不起作用。我使用下面的代码,对此我很满意:)
[somelement].onkeypress = function(e){
  var singleChar=e.key || String.fromCharCode(e.keyCode);
  console.log(singleChar);
}
    
当按键盘和数字键盘上的数字时,onKeyPress上的event.charCode返回相同的代码。 但是onKeyDown(或以上)的event.keyCode返回不同​​的代码。 =>获取字符:在onKeyPress事件中使用event.charCode    event.preventDefault()(或IE上的event.returnValue = false)用于在onKeyDown事件中使用event.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 \”
let pressKeyCode=(kbEv.which||kbEv.keyCode);
 if( kbEv.location===kcNPad_L && pressKeyCode>=kcNumP0 && pressKeyCode<=kcNumP9 )
        pressKeyCode=kcN0+kcNPad9-pressKeyCode;
我仅假设在这两个不相交的数字模式集中,从0到9是连续的。     

要回复问题请先登录注册