【问题标题】:How to perform multiple masks on demand on an Input field如何在输入字段上按需执行多个掩码
【发布时间】:2014-10-06 11:36:18
【问题描述】:

我正在尝试使用 jquery mask plugin 对输入执行掩码,我需要做的是执行两个不同的掩码:

US###-###-###-###-###-### 如果用户首先尝试键入一些数字,则必须应用此掩码。 (这里我的意思是用#输入数字)

但如果用户一开始决定不输入任何数字,我想让他在此之后输入任何类型的字母或 unicod 字符或数字(完全任何字符)

我应该如何执行这样的掩码?

【问题讨论】:

  • 向文本框添加 keyup 事件并检查输入字段的第一个字符是数字还是字符,并在此基础上将掩码动态添加到控件。

标签: jquery jquery-mask


【解决方案1】:

一种可能的解决方案可能是使用 the jQuery Mask Plugin's doc 中由 On-the-fly mask change 调用的内容,如下所示:

HTML

<input type="text" class="US" maxlength="20" autocomplete="off"/>

jQuery

$(document).ready(function(){
    var options =  {onKeyPress: function(us){
        var masks = ['CAAAA-AAA-AAA-AAA-AAA-AAA', 'US000-000-000-000-000-000'];
        if(us.length){
            mask = (us[0].match(/\d/)) ? masks[1] : masks[0];
            $('.US').mask(mask, this);
        }
        $('.US').mask('AAAAA-AAA-AAA-AAA-AAA-AAA', this);
    }};

    $('.US').mask('AAAAA-AAA-AAA-AAA-AAA-AAA', options);
});

说明

您输入的问题是它使用了字符 S。尽管 S 在插件中已经具有不同的含义。根据默认掩码图例:

S: Only A-Z and a-z characters.

所以你有两个选择来解决这个问题:使用翻译模式,或者覆盖“jquery.mask.js”中的默认选项:

var custom_options = {
  byPassKeys: [8, 9, 37, 38, 39, 40],
  translation: {
                '0': {pattern: /\d/}, 
                '9': {pattern: /\d/, optional: true}, 
                '#': {pattern: /\d/, recursive: true}, 
                'A': {pattern: /[a-zA-Z0-9]/}, 
                'S': {pattern: /[a-zA-Z]/}
            };
};

我选择第二个!我将“S”更改为“C”。可能是另一个角色。

查看此链接jsfiddle 以查看工作示例。

希望有用!

【讨论】:

    猜你喜欢
    • 2012-10-25
    • 2019-07-19
    • 1970-01-01
    • 2014-05-29
    • 2022-06-10
    • 2012-02-07
    • 2015-11-21
    • 2011-12-14
    • 2022-01-16
    相关资源
    最近更新 更多