2012-12-06 69 views
0

我有这样的javascript代码,允许在文本框只允许数字输入

function CheckNumeric(e) { 

     if (window.event) // IE 
     { 
      if ((e.keyCode < 48 || e.keyCode > 57) & e.keyCode != 8) { 
       event.returnValue = false; 
       return false; 
      } 
     } 
     else { // Fire Fox 
      if ((e.which < 48 || e.which > 57) & e.which != 8) { 
       e.preventDefault(); 
       return false; 
      } 
     } 
    } 

的问题是,它也是防止“TAB”键只有数字输入!我喜欢让它。

我希望你能帮我做到这一点。

+0

Tab是9我相信,而不是8. –

+0

@Asad 8 is backspace – epascarello

回答

2

我会改变CheckNumeric函数为这样的东西,并使用正则表达式来确定有效/无效的输入。 /[0-9\t\b]+/匹配数字,制表符和退格符。如果你也想使其空间变化/[0-9\t\b\s]+/

function CheckNumeric(e) 
{ 
    var charCode = e.charCode || e.keyCode; 
    var character = String.fromCharCode(charCode); 
    if(!character.match(/[0-9\t\b]+/)) 
    { 
     if(window.event) 
      event.returnValue = false; 
     else 
      e.preventDefault(); 
     return false; 
    } 
    return true; 
} 

另外,为了捕捉键码正确,您应该绑定到onKeyPress事件,而不是onKeyDown,因为它不会为数字键盘提供正确的键码。

<input type="text" onkeypress="CheckNumeric(event)"/> 
0

KeyCode 8用于退格。我不知道你是否因失误或不添加:

function CheckNumeric(e) { 

    if (window.event) // IE 
    { 
     if ((e.keyCode < 48 || e.keyCode > 57) & e.keyCode != 8 & e.keyCode != 9) { 
      event.returnValue = false; 
      return false; 
     } 
    } 
    else { // Fire Fox 
     if ((e.which < 48 || e.which > 57) & e.which != 8 & e.which != 9) { 
      e.preventDefault(); 
      return false; 
     } 
    } 
} 
0

我更喜欢用这里(更干净的代码,简单的逻辑)的方法是使用HTML5属性(或者type="number"pattern="[0-9]*"将工作做好)。

请参阅Disable webkit's spin buttons on input type="number"?如果您决定使用<input type="number">并且要禁用spinners。

如果您确实需要支持具有此行为的旧浏览器,请考虑使用支持html5表单属性的填充。