У меня есть текстовое поле, и когда пользователь вводит первый символ, я должен применить одну из двух масок.
Правила:
Созданный мной 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();
}
});
}());
К счастью, маска правильно применяется. Проблема в том, что первый символ теряется.
Пример:
Что я делаю неправильно?
Спасибо!
Я не уверен, что это то, что вы искали, но...
Плагин пытается применить маску для каждого нажатия клавиши. Несколько изменив маску (и перевод, потому что "#" считается заполнителем цифр) позволяет плагину обрабатывать всю строку ввода и маскировать его.
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/
Опять же, не уверен, что это то, что вы искали.
Я использовал следующий код, чтобы скрыть австралийский номер контактного номера. Правила маскировки будут обновляться, так как пользователь вводит первые две или четыре цифры:
// 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);