Javascript中的简单数字输入验证(Firefox错误)

时间:2017-01-31 10:42:58

标签: javascript google-chrome firefox numbers

function onlyNumberInput(evt) {
var theEvent = evt || window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /[0-9]/;
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}

在Chrome上运行正常但在Firefox中我无法按删除或退格键来编辑号码。我的脚本中的问题在哪里?当然我可以用另一种方式来做这个但我想知道Firefox在上面的脚本上执行会发生什么错误?

2 个答案:

答案 0 :(得分:0)

if(theEvent.preventDefault) theEvent.preventDefault();

你错过了" {"

if(theEvent.preventDefault){
  theEvent.preventDefault();
}

JavaScript是CaseSensitive。记住这一点。 希望它有所帮助。祝你好运。

答案 1 :(得分:0)

您好@Raju Ahmed我检查您的代码并确定您正在使用regex测试密钥,但问题是它只检查数字,这就是您的意思问。但是你也需要检查Delete Key(这是46)并检查Backspace(8)和其他你想要使用的键。

此外,我在Chrome版本55.0.2883.87 m(64位)上测试您的代码,它也不适用于删除,退格等。

如果你使用jQuery,你可能想要这样使用:

function onlyNumberInput(evt) {
        var theEvent = evt || window.event;
        var allowed = [8, 17, 46, 37, 38, 39, 40];
        var key = theEvent.keyCode || theEvent.which;
        var regex = /[0-9]/;
        if($.inArray(allowed, key) !== -1) {
            key = String.fromCharCode( key );
            if( !regex.test(key) ) {
                theEvent.returnValue = false;
                if(theEvent.preventDefault) 
                    theEvent.preventDefault();
            }
        }
    }

如果要使用其他密钥,请找到keyCode密钥并添加到允许的密钥中。 如果您不在代码中使用JQuery,请告诉我。我可以将它改为普通版:)

如果只有一个行作业,可以在JS中使用另一件事:

if(theEvent.preventDefault) 
    theEvent.preventDefault();

编辑II:

那么@Raju我再次检查代码它没有按你的意愿工作。所以如果你想使用它,我会用插件找到一个关于它的例子。

插件:NumericInput,

演示:Demo

您可以查看此链接,了解仅限数字输入:HTML Text Input allow only Numeric input