动态应用JQuery掩码

时间:2014-06-03 20:30:55

标签: javascript jquery jquery-ui

我有一个文本字段,当用户键入第一个字符时,我必须应用两个掩码中的一个。

规则是:

  1. 如果用户键入“#”,则要应用的掩码为“#9999999999”。
  2. 如果用户键入数字,则要应用的掩码为“999.999.999-99”。
  3. 我生成的JavaScript是

    (function () {
      var oldVal;
      $('#id').on('keypress paste textInput input', function () {
        var val = this.value;
        if ((val != oldVal) && (val.length == 1)) {
          oldVal = val;
          if(oldVal == '#'){
            $('#id').mask('999999999');
            $('#id').val(oldVal)
          }else{
            $('#id').mask('999.999.999-99');
            $('#id').val(oldVal)
          }
        }else if(val.length == 0) {
          $('#id').unmask();
        }
      });
    }());
    

    幸运的是,掩码已正确应用。问题是第一个字符丢失了。

    示例:

    1. 当我输入 012.345.678-99 时,该字段获得 _12.345.678-99
    2. 同样,当我输入#2001120001 时,该字段获得 _2001120001
    3. 我做错了什么?

      谢谢!

2 个答案:

答案 0 :(得分:2)

我不确定这是不是你要找的,但是......

插件尝试在每个按键上应用掩码。稍微更改掩码(和翻译,因为"#"被认为是数字占位符)让插件处理整个输入行并掩盖它。

if (oldVal == '#') {
    $('#id').mask('#999999999', {"translation": {"#": null}});
    $('#id').val(oldVal);
} else {
    $('#id').mask('999.999.999-99');
    $('#id').val(oldVal);
}

它适用于这个小提琴。 http://jsfiddle.net/FfR8j/2/

同样,不确定那是否是你要找的东西。

答案 1 :(得分:1)

我使用以下代码来掩盖澳大利亚联系电话号码字段。当用户输入前两位或四位数时,屏蔽规则将更新:

// contactNumberOptions
var contactNumberOptions =  {onKeyPress: function(cep, e, field, options){
    var masks = ['00 0000 0000', '0000 000 000', '0000 0000'];

    var prefix2 = cep.substring(0, 2);
    var prefix3 = cep.substring(0, 5);
    var prefix4 = cep.substring(0, 4);

    mask = masks[2];

    if( prefix2 == '02' || prefix2 == '03' || prefix2 == '07' || prefix2 == '08'){
        mask = masks[0];
    } else if( prefix2 == '04'){
        mask = masks[1];
    } else if( prefix4 == '1800' || prefix4 == '1900' || prefix4 == '1902'){
        mask = masks[1];
    } else  {
        mask = masks[2];
    }

    jQuery('input[name=contact-number]').mask(mask, options);

}};

jQuery('input[name=contact-number]').mask('0000 0000', contactNumberOptions);