Использование ненавязчивой проверки работает с отдельными элементами, но не со всей формой

#asp.net-mvc-3 #unobtrusive-javascript #jquery-validate

#asp.net-mvc-3 #ненавязчивый-javascript #jquery-validate

Вопрос:

Использование Asp.Net MVC3 с ненавязчивой проверкой. У меня есть форма, в которой есть несколько полей ввода. Одно из полей довольно простое:

 <input id="Name" class="valid" type="text" value="" name="Name" data-val-required="Enter your name." data-val-length-min="5" data-val-length-max="50" data-val-length="Enter a valid name." data-val="true">
  

Затем у меня есть некоторый js, который проверяет форму и отправляет ее, только если проверка на стороне клиента проходит, как в:

 var $form = $('#contact_form');
var formAction = $form.attr('action');
var serialized = $form.serialize();

if ($form.validate().valid()) {...
  

Теперь последняя строка всегда возвращает true (да, у меня включен ненавязчивый). Однако, если я изменю последнюю строку на:

 if ($form.validate().element('#Name')) { ...
  

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

Что я пробовал: — повторный анализ формы с помощью $.validator.parse от unobtrusive (… безрезультатно. Это не динамическая форма, и она отображается при загрузке страницы.

Примечание: я также проверил, что jquery (v1.6.2) jquery.validate.min.js (v1.8.1) и jquery.validate.unobtrusive.min.js загружаются в браузере.

Ответ №1:

Вам не нужно вызывать .validate() , но напрямую .valid() :

 if ($form.valid()) {
    ...
}