Плагин Jquery Validation - можете ли вы включить «нетерпеливую» проверку из опций? - PullRequest
10 голосов
/ 01 июня 2009

Я использую плагин Jquery Validation для проекта.

По умолчанию плагин проверяет ввод при нажатии кнопки отправки. Поведение "ленивое", чтобы быть ненавязчивым для пользователя. Если обнаружена ошибка, проверка становится «нетерпеливой» и проверяет ввод, когда пользователь исправляет ошибочные записи.

Есть ли способ переопределить исходное "ленивое" поведение через опцию? Я не могу найти решение в документации.

Пример:

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

Я понимаю выбор дизайна создателя плагина, но мне нужно другое поведение.

Ответы [ 3 ]

15 голосов
/ 01 июня 2009

Благодаря хаосу за руководство по этому вопросу:

Чтобы включить активную проверку в подключаемом модуле проверки jquery, добавьте следующую функцию в функцию проверки:

 $('#myform').validate({
    onfocusout: function(element) {
        $(element).valid();
    }
});
7 голосов
/ 01 июня 2009

На самом деле, поведение по умолчанию, которое я получаю, это проверка на событиях focusout и keyup, которые я вижу в коде плагина по умолчанию. Я должен отключить их в конфигурации плагина, чтобы получить подтверждение только при отправке. Возможно, вам следует опубликовать часть своего кода ... Я не думаю, что ситуация совершенно ясна.

2 голосов
/ 21 января 2015

Я хотел добавить к ответу Роберта, что вы можете сделать это в настройках по умолчанию, используя setDefaults(), чтобы он не зависел от фактического экземпляра метода validate (который не является как правило, подвергаются ненавязчивой проверке).

Просто переопределите свойство onfocusout с помощью функции, которая всегда оценивает размытый элемент, вызывая метод valid():

// enable eager evaluation
$.validator.setDefaults({
    onfocusout: function (element) {
        $(element).valid();
    }
})

Демонстрация с готовой оценкой :
(будет отображаться обязательно после выхода из табуляции)

// enable eager evaluation
$.validator.setDefaults({
  onfocusout: function (element) {
    $(element).valid();
  }
});

$("form").validate();
input.error {
  border-color: red
}
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.js"></script>

<form >
  <input type="text" name="Name" required /><br/>
  <input type="text" name="Email" required /><br/>
  <input type="submit" value="Submit"/>
</form>

Нормальная демоверсия
(не будет отображаться до отправки)

$("form").validate();
input.error {
  border-color: red
}
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.js"></script>

<form >
  <input type="text" name="Name" required /><br/>
  <input type="text" name="Email" required /><br/>
  <input type="submit" value="Submit"/>
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...