我编写了以下代码,以便用户仅输入数字。它在除FireFox之外的所有浏览器中都能正常工作

如果用户单击退格键,则在FireFox中输入数字后,它将无法正常工作。下面是代码。

    <!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>

    <script type="text/javascript">

        function getKeyCodeFromEvent(e) {
            if (typeof e == "object" && typeof e.which == "number") {
                return e.which;
            }
            return window.event.keyCode;
        }

        function checkEntry(e) {
            var keyCode = this.getKeyCodeFromEvent(e);
            var regularExpression = /^[0-9.]+$/;
            return regularExpression.test(String.fromCharCode(keyCode));
        }

    </script>
</head>
<body>
    <input type="text" onkeypress="return checkEntry(event);" />
</body>
</html>

最佳答案

当有人按下Backspace键时,您会从8获得值getKeyCodeFromEvent。在String.fromCharCode(8);中运行它会返回以下unicode值:``。这与您的正则表达式不匹配,因此失败。

您可以通过在将其转换为String值之前检查是否允许使用退格键,Delete键,Tab键,左右键来解决此问题。但是,您将需要使用keydown事件,因为keypress不会返回某些键的值,例如left或right。

不过,在限制用户移动时要特别小心,因为当网站无法正常运行时,这很容易使人们生气。

<script>

    function getKeyCodeFromEvent(e) {
        if (typeof e == "object" && typeof e.which == "number") {
            return e.which;
        }
        return window.event.keyCode;
    }

    function checkEntry(e) {

        var keyCode = getKeyCodeFromEvent(e);
        var regularExpression = /^[0-9.]+$/;

        // If the key is backspace, tab, left, right or delete
        if([8,9,37,39,46].indexOf(keyCode) !== -1 || e.ctrlKey || e.metaKey) {
            return true;
        }
        if(!regularExpression.test(String.fromCharCode(keyCode))) {
            e.preventDefault();
            e.returnValue = false;
            return false;
        }
    }

    // I took the liberty of moving your event from the HTML into JavaScript, where it belongs
    document.addEventListener("DOMContentLoaded", function() {
        document.getElementById('numberinput').addEventListener("keydown", checkEntry, false);
    }, false);
</script>
<input type="text" id="numberinput" />


http://jsfiddle.net/8hzwLjfz/6/

关于javascript - 在Firefox中验证期间,退格键不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33168769/

10-09 17:47