Плагин ввода с маской jquery для очистки поля при возникновении ошибки - PullRequest
30 голосов
/ 21 марта 2012

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

Я звоню так:

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

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

[407-555-____]

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

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

Ответы [ 7 ]

52 голосов
/ 07 февраля 2014

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

$(control).mask('999-999-9999', {autoclear: false});
45 голосов
/ 21 марта 2012

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

mask('?999-999-9999')

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

2 голосов
/ 05 июля 2012

Вы должны удалить оператор input.val(""); в функции checkVal() для правильного решения.

Если вы используете сокращенную версию, вы должны искать и удалять оператор:

if(!a&&c+1<i)f.val(""),t(0,k);else
0 голосов
/ 28 января 2015

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

$('#checkbox').unmask();
0 голосов
/ 23 июля 2013

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

В функции function checkVal (allow) установить параметр allow на true. Это помогает мне.

 function checkVal(allow) {
                    allow = true; ///add this command
//..............
}
0 голосов
/ 26 апреля 2013

Добавление Placeholder может решить проблему.

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

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

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

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

0 голосов
/ 28 марта 2013

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

Я также добавил сообщение пользователя в .bind.Это работает для нас, так как мы используем 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();
})
...