Плагин проверки jQuery - "Обязательное" правило, ведущее себя странно
-
23-12-2019 - |
Вопрос
Я использую это Плагин проверки jQuery (jquery-проверка) в сочетании с Bootstrap, и я уже сделал 5 форм с его помощью и с большим трудом.
Теперь у меня есть это JSFiddle ( Ошибка ), но мое поле пароля ведет себя странно...
Как вы можете видеть, я установил required
правило для пароля, как и для всех.Если я удалю все маркеры в своем браузере и перейду к следующему полю, оно останется нетронутым, если уже отмечено правильно, оно останется правильным, если вообще не отмечено, останется немаркированным. Оно не помечено как неправильное, и сообщение об ошибке не отображается!
Я могу только получить свой required
сообщение об ошибке правила, которое должно отображаться при первом создании minlength
ошибка в поле пароля, и тогда удаление всех символов, или нажав кнопку отправить (доступно только в том случае, если все поля не находятся в состоянии ошибки).
После долгих проверок я нашел onfocusout
вариант.Это может быть либо true
или false
, с установленным по умолчанию значением true
Как указано на веб-сайте,
[It] Проверяет [s] элементы (кроме флажков / переключателей) при размытии.Если ничего не введено, все правила пропускаются, за исключением случаев, когда поле уже было помечено как недопустимое.
Это, несомненно, было бы причиной, подумал я.Но после долгих поисков в Google оказалось, что ни у кого больше не было такой проблемы (или, по крайней мере, из-за onfocusout
правило).В одном посте действительно упоминалось, что "the required
правило - это исключение" (к onfocusout
правило?).
Итог: Я не могу получить свой required
ошибка правила для работы, за исключением случаев отправки или первого изготовления minlength
сообщение об ошибке. Тогда, это действительно проявляется.
Заключение:Ошибка может быть выдана, но не на blur
.
Вопрос:Как это исправить?
Поле для ввода моего пароля
<input type="password" class="form-control" id="passw" name="passw" value="nochange" maxlength="20" required="required" placeholder="123456789" />
Правила моего пароля
passw: {
required: true,
minlength: 5,
maxlength: 20
},
Я добавил console.log
сообщения о том, когда должна была быть размещена ошибка - даже не вызывались.Я проверил свой код и HTML, трижды проверил все, но я все еще не могу найти ошибку...
Решение
Цитируя OP:
"Я не могу заставить работать мою требуемую ошибку правила, за исключением отправки или первого создания сообщения об ошибке минимальной длины.Затем это действительно появляется.....Я проверил свой код и HTML, трижды проверил все, но я все еще не могу найти ошибку "
Это не ошибка.Это называется "Отложенной" проверкой, и это поведение по умолчанию.
"Прежде чем поле будет помечено как недопустимое, проверка будет отложена:Перед отправкой формы в первый раз пользователь может просматривать поля без получения раздражающих сообщений – они не будут прослушиваться до того, как у него появится возможность ввести правильное значение ...он предназначен для ненавязчивого пользовательского интерфейса, как можно меньше раздражая пользователя ненужными сообщениями об ошибках "
Цитируя OP:
"После долгих проверок я обнаружил, что
onfocusout
вариант.Это может быть либоtrue
илиfalse
, с установленным по умолчанию значением true , Как указано на веб-сайте "
Не совсем. onfocusout
является активный по умолчанию;вы не можете установить его на true
не нарушая работу плагина.Вы можете установить его только на false
(чтобы отключить его) ИЛИ вы можете переопределить его с помощью своей собственной функции.
"Установите значение функции, чтобы самостоятельно решать, когда запускать проверку. Логическое значение
true
не является допустимым значением."
Измените onfocusout
опция обратного вызова для более "быстрой" проверки, так что все проверки запускаются сразу после выхода из поля.
$('#yourform').validate({
// your rules & options,
onfocusout: function (element, event) {
this.element(element); // eager validation
}
});
ДЕМОНСТРАЦИЯ: jsfiddle.net/p4K7S/
Для более полной проверки "Нетерпеливости" проделайте то же самое для onkeyup
функция обратного вызова и проверка начнутся, как только начнется ввод текста внутри поля.
$('#yourform').validate({
// your rules & options,
onfocusout: function (element, event) {
this.element(element); // eager validation
},
onkeyup: function (element, event) {
this.element(element); // eager validation
}
});
ДЕМО-ВЕРСИЯ 2: jsfiddle.net/em0uspk3/
Зачем вам все еще нужно onfocusout
при использовании onkeyup
?Потому что во время взаимодействия пользователя с элементами radio, checkbox и select отсутствуют события ввода ключа.