【问题标题】:Restrict characters in input field限制输入字段中的字符
【发布时间】:2014-03-28 09:12:24
【问题描述】:

当用户在输入字段中输入时,是否有任何选项可以使用此代码而不显示字母或字符?这是我已经尝试过的代码,我想保留它,但是现在当我在输入中写入受限字符时,它会显示它们一秒钟。我需要将输入保持空白

编辑:我不想更改代码,因为这在平板电脑上效果很好(其他限制字符功能没有)。唯一的问题是按下受限字符会延迟

代码:

function checkInput(ob){
    var invalidChars = /[^0-9]/gi
            if(invalidChars.test(ob.value)) {
                    ob.value = ob.value.replace(invalidChars,"");
          }
};

HTML:

<input class="input" maxlength="1" onChange="checkInput(this)" onKeyup="checkInput(this)" type="text" autocomplete="off"/>

【问题讨论】:

  • 为什么不设置 type='password'....
  • 它也应该是 type="input" 而不是 class="input" 。 (如果要设置样式,请使用 [type="input"])
  • @iJay OP 不想隐藏所有字符,而是删除其中一些字符。
  • 只在“onkeypress”事件上调用函数
  • Cancel the keydown in HTML 的可能重复项

标签: javascript jquery


【解决方案1】:

你可以试试这个,

$('.input').keyup(function () {
    if (!this.value.match(/[0-9]/)) {
        this.value = this.value.replace(/[^0-9]/g, '');
    }
});

SEE THIS FIDDLE DEMO

更新:

你可以试试这个代码,

$(document).ready(function() {
    $(".input").keydown(function (e) {
        // Allow: backspace, delete, tab, escape and enter
        if ($.inArray(e.keyCode, [46, 8, 9, 27, 13, 110]) !== -1 ||
             // Allow: Ctrl+A
            (e.keyCode == 65 && e.ctrlKey === true) || 
             // Allow: home, end, left, right
            (e.keyCode >= 35 && e.keyCode <= 39)) {
                 // let it happen, don't do anything
                 return;
        }
        // Ensure that it is a number and stop the keypress
        if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {
            e.preventDefault();
        }
    });
});

SOURCE

SEE UPDATED FIDDLE DEMO

为安卓系统更新:

<EditText
android:id="@+id/editText1"
android:inputType="number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:layout_marginTop="58dp"
android:layout_toRightOf="@+id/textView1"
android:maxLength="1" >
</EditText>

我认为它可能会对您有所帮助...使用 android:inputType="number" 您可以做到这一点。

【讨论】:

  • 当我尝试在输入中使用受限字符时同样的延迟
  • 当它甚至不起作用时,它是如何获得两个支持的?
  • @Niklas 如果你打开小提琴并输入 a,b,c,d ...你可能会看到延迟,字母会显示一秒钟,试着按住一个字母跨度>
  • 没错。谢谢 CJRamki
  • 还有1件事,不允许。
【解决方案2】:

按键和粘贴事件的组合可以解决问题:

var text = document.getElementById('text');
text.onkeypress = text.onpaste = checkInput;

function checkInput(e) {
    var e = e || event;
    var char = e.type == 'keypress' 
        ? String.fromCharCode(e.keyCode || e.which) 
        : (e.clipboardData || window.clipboardData).getData('Text');
    if (/[^\d]/gi.test(char)) {
        return false;
    }
}
&lt;input class="input" maxlength="10" id="text" type="text" autocomplete="off" /&gt;

此代码可防止键入或粘贴除数字以外的任何内容。也不会出现闪烁和无效字符。

在 IE7+ 中工作。

演示:http://jsfiddle.net/VgtTc/3/

【讨论】:

    【解决方案3】:

    您可以尝试以下小技巧:DEMO

    它的作用是将每个输入文本着色为白色,然后在符合您的要求时将其改回黑色。如果您可以忍受输入有效字符时出现的延迟。

    function checkInput(ob) {
        var invalidChars = /[^0-9]/gi
        if (invalidChars.test(ob.value)) {
            ob.value = ob.value.replace(invalidChars, "");
        }
        else {
            document.getElementById('yourinput').style.color = '#000';
        }
    };
    
    function hideInput(ob) {
        document.getElementById('yourinput').style.color = '#FFF';
    };
    

    html

    <input id="yourinput" class="input" maxlength="1" onKeydown="hideInput(this)" onKeyup="checkInput(this)" type="text" autocomplete="off" />
    

    css

    input {color:#FFF;}
    

    【讨论】:

    • 在不使用 css 的情况下有什么办法吗?当您按下我根本不想显示的受限字符时,它只是延迟
    • 你的回答很好,就像你说的有点小技巧,但我仍然想知道我怎样才能毫不拖延地使用这段代码
    • 是的,我正在尝试其他一些事情,但我似乎无法摆脱滞后。
    【解决方案4】:
    <input id="testInput"></input>
    
    <script>
    testInput.onchange = testInput.oninput = restrict;
    
    function restrict() {
        testInput.value = testInput.value.replace(/[^a-z]/g, "");
    }
    </script>
    

    我想出了一些稍微不同的东西。 oninput 代替 onkeyup/onkeydown,onchange 代替 onpaste。

    【讨论】:

      【解决方案5】:

      检查此代码,

      $('.input').keypress(function(e) {
          var a = [];
          var k = e.which;
      
          for (i = 48; i < 58; i++)
              a.push(i);
      
          if (!(a.indexOf(k)>=0))
              e.preventDefault();
      });
      

      【讨论】:

        【解决方案6】:

        我在按键和粘贴事件中都限制了无效字符,例如:

        <input type="text" onkeydown="validateKey(event)" onpaste="validatePaste(this, event)">  
        

        并在选项卡或单独的 javascript 文件中定义处理这些事件的函数:

        <script>
        function validateKey(e) {
          switch(e.keyCode) {
            case 8,9,13,37,39:
              break;
            default:
              var regex = /[a-z .'-]/gi;
              var key = e.key;
              if(!regex.test(key)) {
                e.preventDefault();
                return false;
              }
              break;
          }
        }
        function validatePaste(el, e) {
          var regex = /^[a-z .'-]+$/gi;
          var key = e.clipboardData.getData('text')
          if (!regex.test(key)) {
            e.preventDefault();
            return false;
          }
        }
        </script>
        

        【讨论】:

          猜你喜欢
          • 2012-01-29
          • 2012-02-11
          • 2014-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-31
          相关资源
          最近更新 更多