【问题标题】:Prevent certain characters being typed into text input防止某些字符被输入到文本输入中
【发布时间】:2015-08-13 12:17:51
【问题描述】:

我已经阅读了许多与此类似的问题。并且一些解决方案有效。但是,我可以让它工作的唯一方法是允许输入字符,然后将其删除。它看起来很乱,感觉很hacky。

我首先如何防止字符被输入?

演示:https://jsfiddle.net/jf8bqp5z/

HTML:

<input type="text" name="test" id="test"/>

jQuery:

$('#test').keyup(function(e){
    var $this = $(this);
    var val = $this.val();

    if( val.indexOf('.') ){
        val = parseInt(val);
        $this.val(val);
        e.preventDefault();
    }
});

解决方案

其实很简单。我已将keyup 事件切换为keydown,然后查找keyCode:

$('#test').keydown(function(e){
    var $this = $(this);
    var val = $this.val();

    if( e.keyCode === 65 ){     //Here provide the JavaScript event keycode of the key to prevent being typed.
        e.preventDefault();
    }
});

演示:https://jsfiddle.net/j80hryvm/

注意:您可以从http://keycode.info/获取keycode

【问题讨论】:

  • 这可能无法处理用户将某些内容粘贴到输入字段中的情况......为了抓住这一点,您必须不断地重新检查内容 - 可能使用settimeout。 ..
  • 我将只使用pattern HTML 属性并让浏览器处理将输入标记为无效。
  • @dsh 只会在我尝试提交时标记为无效。我想首先阻止它被输入。
  • @user3065931 一旦无效就会标记为无效(即输入输入时,不等到提交)。确实,它并不会阻止输入首先出现。

标签: jquery html validation input


【解决方案1】:

我找到了这个answer,它从不打印您不想打印的字符。

您可以通过阻止 keyPress 事件来完成此操作 发生在非数值上

例如(使用 jQuery)

$('.input-selector').on('keypress', function(e){
  return e.metaKey || // cmd/ctrl
    e.which <= 0 || // arrow keys
    e.which == 8 || // delete key
    /[0-9]/.test(String.fromCharCode(e.which)); // numbers
})

这说明了所有不同类型的输入(例如,来自 数字键盘的代码与键盘不同)以及 退格键、方向键、control/cmd + r 重新加载等

【讨论】:

    【解决方案2】:

    您可能需要return false:

    $('#test').keyup(function(e){
        var $this = $(this);
        var val = $this.val();
    
        if( val.indexOf('.') ){
            val = parseInt(val);
            if (val == NaN)
                return false;
            $this.val(val);
            e.preventDefault();
        }
    });
    

    【讨论】:

    • 这没什么区别。它仍然让“。”被输入。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    相关资源
    最近更新 更多