繁体   English   中英

验证Javascript中的数字在Firefox中不起作用

[英]Validate Number in Javascript not working in Firefox

当输入文本为0到10(0、1、2、3、4、5、6、7、8、9、10)时,此验证返回true。 退格键无法在Firefox中运行,在Google Chrome中,Internet Explorer可以正常工作。我试图启用退格键的字符代码,但问题仍然存在。 如何使它在firefox中工作?

我有这个:

<script>
function compruebacampo(evt, campotexto)
{
    var charCodeOfZero = 48;
    var numberJustEntered = evt.charCode - charCodeOfZero;
    var fullString = campotexto.value + "" + numberJustEntered;

    var matchesOne = false;
    for (var i = 0; i <= 10; i++) {
        if (fullString == ("" + i)) 
            matchesOne = true;
    }

    if (!matchesOne)
        return false;
}
</script>


<input type="textbox" onkeypress="return compruebacampo(event,this)" >

任何帮助将不胜感激。

我打算编写一个使用特定于浏览器的案例的函数(通过navigator.userAgent ),但是我认为这太笨拙且复杂。 我认为最简单的方法是将事件处理程序绑定到该特定输入,并让其侦听keyCode (FireFox中的key )。 此方法还避免了内联JavaScript,这绝对是一个加分项。

event.keyCode < 58 && event.keyCode > 47

对于非FireFox浏览器,这将捕获所有数字( 0-9 )。

event.key > -1 && event.key < 10

在FireFox中,这将捕获所有数字( 0-9 ),因为上述操作将失败。

event.keyCode == 8 || event.keyCode == 0

捕获退格键并允许它们通过。

的HTML

<input type="text" id="numberInput">

的JavaScript

document.getElementById("numberInput").onkeypress = function (event) {
    if (event.keyCode < 58 && event.keyCode > 47 || event.key > -1 && event.key < 10) {
        /* nothing */
    } else if (event.keyCode == 8 || event.keyCode == 0) {
        /* nothing */
    } else {
        event.preventDefault();
    }
}

我在Safari,FireFox和Chrome中进行了测试。 对我来说,这三个方面都起作用。 我确信您可以将这些布尔值重写为一个if块。

小提琴

 $('input').keypress(function (e) {    
 if ($(this).attr('id') == "txtBoxId") {
                        regex = new RegExp("^[0-9\b]+$");
                        var charString = String.fromCharCode(!e.charCode ? e.which : e.charCode);
                        if (regex.test(charString)) {
                            return true;
                        }
                        else {
                            e.preventDefault();
                            return false;
                        }
                    }
}

尝试使用此替代方法,该方法仅允许在字段上输入数字: http : //jsfiddle.net/6faHh/

function compruebacampo(e, campotexto) {
    if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
            return false;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM