Применение маски JQuery динамически

0

У меня есть текстовое поле, и когда пользователь вводит первый символ, я должен применить одну из двух масок.

Правила:

  1. если пользователь набирает "#", применяемая маска "# 9999999999".
  2. Если пользователь набирает номер, применяемая маска - "999.999.999-99".

Созданный мной 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.

Что я делаю неправильно?

Спасибо!

  • 0
    Первый символ потерян из-за плагина маски.
  • 0
    И я не могу преодолеть это?
Показать ещё 4 комментария

2 ответа

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/

Опять же, не уверен, что это то, что вы искали.

  • 0
    Мэтт скрипка делает именно то, что я хотел. Ваш код заставил мой скрипт работать правильно для случая #. Однако у него та же проблема со вторым случаем (маска 999.999.999-99). Моя версия jquery 2.0. Любая другая мысль?
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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню