Плагин проверки jQuery - "Обязательное" правило, ведущее себя странно

StackOverflow https://stackoverflow.com//questions/22074548

Вопрос

Я использую это Плагин проверки 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 отсутствуют события ввода ключа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top