Javascript 仅数字输入键码校验器也接受正斜杠
我写了一段代码,它只接受数字值作为键事件。它应该只接受0-9和退格。但它也允许正斜杠作为输入Javascript 仅数字输入键码校验器也接受正斜杠,javascript,input,Javascript,Input,我写了一段代码,它只接受数字值作为键事件。它应该只接受0-9和退格。但它也允许正斜杠作为输入 element.addEventListener('keypress',function(event){ var charcodeAcceptable=[47,48,49,50,51,52,53,54,55,56,57,8]; if (window.event) { var charCode = window.event.
element.addEventListener('keypress',function(event){
var charcodeAcceptable=[47,48,49,50,51,52,53,54,55,56,57,8];
if (window.event) {
var charCode = window.event.keyCode;
}
else if (event) {
var charCode = event.which;
}
if(charcodeAcceptable.indexOf(charCode)==-1){
event.preventDefault();
}
});
正斜杠
/
的ASCII码是47,因此您的索引返回0而不是-1。正斜杠/
的ASCII码是47,因此您的索引返回0而不是-1。在我下面引用的原始响应之后,根据@t.niese留下的评论,我创建了一支更新过的钢笔
基本上,使用event.key
获取按键的值,然后根据允许的值进行测试:
element.addEventListener('keypress',function(event){
var charcodeAcceptable=['1','2','3','4','5','6','7','8','9','0','Backspace'];
if (window.event) {
var charCode = window.event.key;
}
else if (event) {
var charCode = event.key;
}
if(charcodeAcceptable.indexOf(charCode)==-1){
event.preventDefault();
}
});
我修改了代码以使用event.keyCode,它的工作原理如下
预料之中
Chris Coyier的原创笔
见@t.niese的评论
关于测试本身,t测试是否重要
窗口事件
如果没有,您不能仅使用:
element.addEventListener('keypress',function(event){
var charcodeAcceptable=[47,48,49,50,51,52,53,54,55,56,57,8];
if(charcodeAcceptable.indexOf(event.keyCode)==-1){
event.preventDefault();
}
});
在我下面引用的原始回复之后,根据@t.niese留下的评论,我创建了一支更新的钢笔
基本上,使用event.key
获取按键的值,然后根据允许的值进行测试:
element.addEventListener('keypress',function(event){
var charcodeAcceptable=['1','2','3','4','5','6','7','8','9','0','Backspace'];
if (window.event) {
var charCode = window.event.key;
}
else if (event) {
var charCode = event.key;
}
if(charcodeAcceptable.indexOf(charCode)==-1){
event.preventDefault();
}
});
我修改了代码以使用event.keyCode,它的工作原理如下
预料之中
Chris Coyier的原创笔
见@t.niese的评论
关于测试本身,t测试是否重要
窗口事件
如果没有,您不能仅使用:
element.addEventListener('keypress',function(event){
var charcodeAcceptable=[47,48,49,50,51,52,53,54,55,56,57,8];
if(charcodeAcceptable.indexOf(event.keyCode)==-1){
event.preventDefault();
}
});
您的正斜杠是否与0-9位数字位于同一个键上?据我所知,正斜杠键码是191。您的charcode中包含了47
可接受的,并且47
是//code>它说的是191:/Check here:)您的正斜杠是否与0-9位数字位于同一个键上?据我所知,正斜杠键码是191191您已将47
包含在您的charcodeAcceptable
中,47
是/
它说191:/Check here:)使用event.keyCode
而不是事件。在FF事件中,它不会解决问题。keyCode
将是0
。您甚至不应该使用keyCode
(和which
),因为它已被弃用:47
表示按键中的/
,因此必须将其从charcodeAcceptable
中删除。使用事件。keyCode
而不是事件。在FF事件中,它将不会解决问题。keyCode
将为0
。您甚至不应该使用keyCode
(和which
),因为它已被弃用:47
表示按键中的/
,因此必须将其从字符CODEACCEPLABLE
中删除。