数字输入验证

Numeric input validation

本文关键字:验证 数字输入      更新时间:2023-09-26

我正在对输入type='text'元素进行验证。我已经将pastekeydown事件连接起来,以捕获输入并将其限制为数字。keydown似乎工作顺利,我似乎无法让任何浏览器真正不将文本粘贴到字段中(我看到有一个beforepaste事件,这可能是问题所在——但它似乎不受Firefox支持。最后,如果值不是数字,我只会将输入消隐。这会导致短暂的闪烁,但似乎有效。

有更干净的方法吗?我是不是错过了什么?有没有办法防止闪烁?我知道HTML5的类型是"数字",但我还没有准备好。

<input type="text" id="number" />
<script type="text/javascript">
    $(document).ready(function () {
        enableNumericOnlyEntry("#number");
        function enableNumericOnlyEntry(object) {
            $(object).bind('paste', numericOnlyPaste);
            $(object).bind('keydown', null, numericOnlyKeyDown);
            function numericOnlyPaste(event) {
                var inputText = "";
                var element = event.target;
                setTimeout(function () {
                    var text = $(element).val();
                    if (isNaN(text)) {
                        $(element).val("")
                        return false;
                    }
                }, 0);
            }
            function numericOnlyKeyDown(event) {
                // Allow: backspace, delete, tab, escape, and enter
                if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||
                    // Allow: Ctrl+A/a
                    (event.keyCode == 65 || event.keyCode == 97) && (event.ctrlKey === true) ||
                    // Allow: Ctrl+C/c
                    (event.keyCode == 67 || event.keyCode == 99) && (event.ctrlKey === true) ||
                    // Allow: Ctrl+V/v
                    (event.keyCode == 86 || event.keyCode == 118) && (event.ctrlKey === true) ||
                    // Allow: Ctrl+X/x
                    (event.keyCode == 88 || event.keyCode == 120) && (event.ctrlKey === true) ||
                    // Allow: home, end, left, right
                    (event.keyCode >= 35 && event.keyCode <= 39)) {
                    // let it happen, don't do anything
                    return true;
                }
                else {
                    // Ensure that it is a number and stop the keypress
                    if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {
                        return false;
                    }
                }
            }
        }
    });

我用这个项目创建了一个屏蔽编辑框的字段,你也可以删除它的下划线,这样它看起来就不像屏蔽编辑了。非常易于使用:http://digitalbush.com/projects/masked-input-plugin/

然后你会使用类似$("#box").mask("9999999");和你的好去,工作伟大!

HTML5的<input type="number">正是您真正想要使用它的地方。如果你使用的浏览器支持它(基本上除了Safari和旧版本的IE之外的所有浏览器),它可以做你想要的一切。

也就是说,为什么不注册一个onpaste处理程序,以便在用户粘贴后将粘贴的内容减少到数字?