2016-07-13 33 views
0

我写了一段只接受数值作为关键事件的码。它应该只接受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(); 

      } 
     }); 
+1

是你正斜杠位于同一个按键0-9数字? – RDardelet

+0

据我所知正斜杠键码是191 –

+2

你已经在你的'charcodeAcceptable'中包含'47'并且'47'是'/' –

回答

2

为正斜杠/ ASCII码为47,所以你indexOf返回0,而不是-1。

0

在我引用下面的原始答复后,根据@ t.niese留下的评论,我创建了一个更新的笔。

http://codepen.io/ballerton/pen/PzOdxW

Essentialy,使用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的代码和它的工作原理预计为 。

http://codepen.io/ballerton/pen/vKWzRO

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.keyCode; 
     } 


     if(charcodeAcceptable.indexOf(charCode)==-1){ 
     event.preventDefault(); 

     } 
    }); 

原笔由@ t.niese

克里斯Coyier

见注释对于测试本身,是不是看到重要的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

使用'event.keyCode'而不是'event.which'不能解决问题,在FF中'event.keyCode'将是'0'。你甚至不应该使用'keyCode'(和'which'),因为它被弃用:[KeyboardEvent.keyCode](https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/keyCode )。 '47'代表按键中的'/',所以它必须在'charcodeAcceptable'后面移除。 –

+0

我已经更新了我的答案,谢谢你的信息:D –