Javascript 仅数字输入键码校验器也接受正斜杠

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.

我写了一段代码,它只接受数字值作为键事件。它应该只接受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.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
中删除。