按键盘上的键时,我收到代码 [96..105] [0..9]
这些代码对应于字符:'a b c d e f g h i'而不是 [0..9] ,同时尝试以这种方式获取代码String.fromCharCode(event.keyCode).
问题:
我在表单中有3个输入。用户只允许输入第一个输入。当用户按下键盘上的键时,如果按下键是数字,则某些功能需要对其进行过滤并将其写入第二个输入,否则必须将其写入第二个输入。如何纠正?请参阅下面的链接,因为它描述了我实施的所有流程和代码
答案 0 :(得分:59)
使用keypress
处理程序:
[somelement].onkeypress = function(e){
e = e || event;
console.log(String.fromCharCode(e.keyCode));
}
如果您想使用keyup
或keydown
处理程序,可以从e.keyCode
中减去48来获取数字(String.fromCharCode(e.keyCode-48)
)
答案 1 :(得分:10)
我使用以下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);
答案 2 :(得分:4)
有一种方法可以通过keydown执行此操作,如果由于事件取消需要而无法使用keypress等,请使用带有此测试的if()语句:
parseInt(event.keyIdentifier.substring(2),16) > 47 && parseInt(event.keyIdentifier.substring(2),16) < 58
OR,与jQuery事件:
parseInt(event.originalEvent.keyIdentifier.substring(2),16) > 47 && parseInt(event.originalEvent.keyIdentifier.substring(2),16) < 58
这些示例假设“event”是keydown事件。 keyIdentifier是一个十六进制数字,表示相关char的unicode值。使用keyIdentifier,即使使用keyDown事件,数字键盘/键盘上的数字和QWERTY键盘上方的数字都将具有相同的值48 - 57(U + 0030 - U + 0039)。
浏览器中的Unicode值看起来像U + 0030或U + 002F。将此字符串解析为仅获取十六进制值,然后使用基数为16的parseInt()将其转换为base-10。
答案 3 :(得分:2)
确定。但在Firfox Gecko它不起作用。我使用波纹管代码,我很满意:)
[somelement].onkeypress = function(e){
var singleChar=e.key || String.fromCharCode(e.keyCode);
console.log(singleChar);
}
答案 4 :(得分:0)
event.charCode返回相同的代码。 但onKeyDown(或更高版本)的event.keyCode返回不同的代码。 =&GT; get char:在onKeyPress事件中使用event.charCode event.preventDefault()(或IE上的event.returnValue = false)用于onKeyDown事件的数字使用event.keyCode
答案 5 :(得分:0)
我认为更安全的方法是不假定将使用值键。您可以通过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是连续的。