jQuery маскируется плагин ввода, чтобы не очистить поле при ошибке

Я смотрю на http://digitalbush.com/projects/masked-input-plugin/

Я называю это так:

$(control).mask('999-999-9999');

и я не хочу, чтобы он выбрасывал ввод пользователей, если что-то не так, например, они не закончили

[407-555-____]

Если вы покидаете поле после того, как набрали это много, он очищает его. Я хочу оставить его, чтобы они могли закончить позже.

Я новичок в jQuery, и я просмотрел его источник, но я не могу найти способ сделать это, и я не могу найти способ отредактировать его, чтобы выполнить то, что я хочу, потому что код тайный для моих глаз.

7 ответов


установите для параметра autoclear значение false.

$(control).mask('999-999-9999', {autoclear: false});

похоже, я должен просто сделать всю маску необязательной:

mask('?999-999-9999')

таким образом, элемент управления считает, что пользователь имеет "допустимый", и я могу продолжить. Хотя это не совсем необязательная часть маски.


вы должны удалить заявление input.val(""); на


в дополнение к удалению ввода.val ("") в checkVal () вы также можете изменить вызов на clearBuffer. В исходном коде это: clearBuffer (0, len); удаление всего пользовательского ввода. если вы измените это на clearBuffer (lastMatch + 1, len); пользовательский ввод будет отображаться, а затем заполнители маски, которые все еще необходимы для завершения правильного ввода.

Я также добавил сообщение пользователя в.связывать. Это работает для нас, так как мы используем MaskedInput ровно для одного типа вход. Я проверяю любой ввод, идущий дальше позиции 7, потому что именно там начинается ввод пользователя.

вот что я сделал:

.bind("blur.mask", function() {
    // find out at which position the checkVal took place
    var pos = checkVal();
    // if there was no input, ignore
    if (pos <=7) {input.val(""); clearBuffer(0, len);}  
    // if the user started to input something, which is not complete, issue an alert
    if (pos > 7 && pos < partialPosition) alert("Tell the user what he needs to do.");
    if (input.val() != focusText)
    input.change();
})

добавление заполнителя может решить проблему.

$(control).mask('999-999-9999');

добавьте пустой держатель места в маску. смотрите ниже

$(control).mask('999-999-9999', { placeholder: "" });

который заменит _ в текстовом поле ввода по умолчанию. таким образом, бот будет любым _ left, если входная длина динамическая и не фиксированная.


попробуйте обновить файл jquery.maskedinput.js

в функции функция checkVal (allow) установить параметр allow on true. Это поможет мне.

 function checkVal(allow) {
                    allow = true; ///add this command
//..............
}

поиск в сценарии подключения метода unmask.

$('#checkbox').unmask();