Плагин jQuery Validate - триггерная проверка одного поля

90

У меня есть форма, которую можно предварительно заполнить через facebook connect. После подключения пользователя его имя и адрес электронной почты заполняются автоматически. Проблема в том, что при этом не запускается удаленная проверка, чтобы проверить, существует ли уже адрес электронной почты.

Есть ли способ вызвать проверку только для этого поля? Что-то вроде:

$('#email-field-only').validate()

была бы идея. Искал документы безуспешно.

Райан
источник

Ответы:

148

Кажется, этот метод делает то, что вы хотите:

$('#email-field-only').valid();
Грегуар
источник
4
Примечание: имя элемента формы также работает с этой функцией, то есть $('input[name=email-field-only]').valid();также работает
Raptor
1
в чем проблема? когда я использую этот метод, моя проверка прерывается
nakajuice
2
Это решение проверяет всю форму, показывая сообщения об ошибках для всех полей.
Пабло
@haemhweg, может быть, вы не вызывали метод .validate () перед попыткой использовать .valid () ? Документы: jqueryvalidation.org/valid
userfuser
1
API изменился, используйте ответ, предоставленный Полом
Anima-
24

Использование Validator.element():

Проверяет один элемент, возвращает true, если он действителен, и false в противном случае.

Вот пример, показанный в API:

var validator = $( "#myform" ).validate();
validator.element( "#myselect" );

.valid()проверяет всю форму, как указывали другие. API говорит:

Проверяет, действительна ли выбранная форма или все выбранные элементы действительны.

Павел
источник
20

По какой-то причине некоторые другие методы не работают до тех пор, пока поле не будет сфокусировано / размыто / не изменено, или пока не будет предпринята попытка отправки ... это работает для меня.

$("#formid").data('validator').element('#element').valid();

Пришлось копаться в скрипте jquery.validate, чтобы найти его ...

Tracker1
источник
1
Это то, что сработало для меня, я также добавил .valid()в конце, поэтому он искал меня, $("#Form").data('validator').element('input[name=__Suburb]').valid(); я считаю, что если вы не выберете его по идентификатору, это может потребоваться.
Михай П.
2
Я не думаю, что место .valid()в конце выражения. .element()Функция возвращает логический результат ( документы | Src ). Когда я пытаюсь вызвать .valid (), я получаю сообщение об ошибке: «Uncaught TypeError: $(...).data(...).element(...).validне функция»
KyleMit
Вы прикрепили валидатор к форме? прошло несколько лет с тех пор, как я использовал проверку JQuery ... Так что API для этого, возможно, изменился. В то время мне пришлось проработать внутреннее устройство, чтобы найти вышеупомянутое. Он не был опубликован в документации, поэтому структура вполне могла измениться с тех пор, как я последний раз смотрел.
Tracker1
16
$("#FormId").validate().element('#FieldId');
Асланпайи
источник
2
Я предпочитаю этот метод, это хороший 1 лайнер. Отлично работает, спасибо.
Энди
1
Это идеальный ответ без ошибок с допустимым типом возвращаемого значения
Kaushik Thanki
7

Когда вы настраиваете валидацию, вы должны сохранить объект валидатора. вы можете использовать это для проверки отдельных полей.

<script type="text/javascript">
var _validator;
$(function () {    
     _validator = $("#form").validate();   
});

function doSomething() {    
     _validator.element($('#someElement'));
}
</script> 

- кросс-постил с этим похожим вопросом

ШейнБлейк
источник
7

Если вы хотите проверить отдельное поле формы, но не хотите, чтобы пользовательский интерфейс запускался и отображались какие-либо ошибки проверки, вы можете рассмотреть возможность использования метода Validator.check (), который возвращается, если данное поле проходит проверку или нет.

Вот пример

var validator = $("#form").data('validator');
if(validator.check('#element')){
    /*field is valid*/
}else{
    /*field is not valid (but no errors will be displayed)*/
}
Дмитрий Комин
источник
0

в случае, если вы хотите выполнить проверку «некоторых элементов» (не всех элементов) в вашей форме. Вы можете использовать этот метод:

$('input[name="element-one"], input[name="element-two"], input[name="element-three"]').valid();

Надеюсь, это поможет всем :)

ИЗМЕНЕНО

Перец
источник