JavaScript:限制字段-不能删除特殊符号

JavaScript: Restricting fields - cannot remove special symbols

本文关键字:不能 删除 特殊符号 字段 JavaScript      更新时间:2023-09-26

我试图通过在setInterval中检查输入文本并删除非数字字符来将其限制为数字。现在到目前为止,这个工作相对来说还可以,但我无法删除"特殊符号"。例如,如果我输入西班牙重音符号"或像"这样的符号,它们应该在一个字符上,它会重置字段,并且不会再次分配值,尽管该符号已从字符串中删除(如果我记录字符串,我可以看到它是)。

示例:

  1. 键入123a=>删除"a",输入包含123
  2. 键入123=>输入包含一个空字符串,尽管"text"字符串包含123并且具有3的长度
  3. 键入123并在其=>删除后粘贴,输入包含123

这似乎与特殊符号不是。。。自立(?),并且需要在接下来应该输入的字符上。一些想法如何解决?非常感谢。

我有以下HTML:

<body>
    <input type="text" id="input_field">
</body>

以及JS:

$("#input_field").focus(function(e) {
            console.log("got focus"+$(this).val());
            var obj = this;
            intID = setInterval(function() {restrictNumbers(obj)}, 10);
        });
        $("#input_field").blur(function(e) {
            console.log("got blur")
            clearInterval(intID);
        });
        function restrictNumbers(field) {
            var text = $(field).val();
            var caretPos;
            var modified = false;
            if(text.length > 0) {
                for(var i=0; i<text.length; i++) {
                    if(isNaN(text.charAt(i))) {
                        modified = true;
                        caretPos = field.selectionStart - 1;
                        text = text.replace(text.charAt(i), "");
                        i--;
                    }
                }
                $(field).val(text);
                if(modified) {
                    modified = false;
                    field.setSelectionRange(caretPos, caretPos);
                }
            }
        }

JSfiddle示例:http://jsfiddle.net/AvMZ5/

您可以使用这个:-

jQuery.fn.ForceNumericOnly =
function()
{
    return this.each(function()
    {
        $(this).keydown(function(e)
        {
            var key = e.charCode || e.keyCode || 0;
            // allow backspace, tab, delete, arrows, numbers and keypad numbers ONLY
            // home, end, period, and numpad decimal
            return (
                key == 8 || 
                key == 9 ||
                key == 46 ||
                key == 110 ||
                key == 190 ||
                (key >= 35 && key <= 40) ||
                (key >= 48 && key <= 57) ||
                (key >= 96 && key <= 105));
        });
    });
};

然后,您可以通过以下操作将其连接到您的控制上:

$("#yourTextBoxName").ForceNumericOnly();

来源:-https://gist.github.com/wholypantalones/3083362