Плагин jQuery Validation: отключить проверку для указанных кнопок отправки

У меня есть форма с несколькими полями, которые я проверяю (некоторые с методами, добавленными для выборочной проверки) с отличным плагином JQuery Validation от Jörn Zaeffere. Как вы обходите проверку с помощью указанных элементов управления отправкой (другими словами, проверка работоспособности с некоторыми сообщениями ввода, но не срабатывает проверка с другими)? Это будет похоже на ValidationGroups со стандартными контрольными элементами ASP.NET.

Моя ситуация:

Это с ASP.NET WebForms, но вы можете игнорировать это, если хотите. Тем не менее, я использую валидацию скорее как «рекомендацию»: другими словами, когда форма отправляется, выполняется проверка, но вместо отображения «требуемого» сообщения «рекомендация» показывает, что что-то говорит по строке «вы пропустили следующие поля … Вы все равно хотите продолжить? ” В этот момент в контейнере ошибок появляется другая кнопка отправки, которая может быть нажата, которая будет игнорировать проверку и отправить в любом случае. Как обходить формы .validate () для этой кнопки управления и по-прежнему сообщение?

Пример покупки и продажи дома по адресу http://jquery.bassistance.de/validate/demo/multipart/ позволяет использовать это для того, чтобы ударить предыдущие ссылки, но это делается путем создания пользовательских методов и добавления их в валидатор. Я бы предпочел не создавать собственные методы, дублирующие функциональные возможности уже в плагине проверки.

Ниже приведена сокращенная версия непосредственно применимого скрипта, который у меня есть прямо сейчас:

var container = $("# div.validationSuggestion"); $('#').validate({ errorContainer: container, errorLabelContainer: $("ul",container), rules: { : { required: true }, : { required: true } // etc. }, messages: { : 'A message.', : 'Another message.' // etc. }, highlight: function(element, errorClass) { $(element).addClass(errorClass); $(element.form).find("label[for=" + element.id + "]").addClass(errorClass); $(element.form).find("label[for=" + element.id + "]").removeClass("valid"); }, unhighlight: function(element, errorClass) { $(element).removeClass(errorClass); $(element.form).find("label[for=" + element.id + "]").removeClass(errorClass); $(element.form).find("label[for=" + element.id + "]").addClass("valid"); }, wrapper: 'li' }); 

Вы можете добавить class CSS cancel к кнопке отправки, чтобы подавить проверку

например

  

См. Документацию jQuery Validator этой функции здесь: Пропуск проверки для отправки


EDIT :

Вышеупомянутый метод устарел и заменен атрибутом formnovalidate .

  

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

 $("form").validate().cancelSubmit = true; 

на событие щелчка кнопки (например).

Добавить атрибут formnovalidate для ввода

    

Добавление classа = «отмена» теперь устарело

См. Документы для проверки пропусков для отправки по этой ссылке.

Вы можете использовать опцию onsubmit: false (см. Документацию ) при подключении проверки, которая не будет проверяться при отправке формы. А затем в вашей asp: button добавьте OnClientClick = $ (‘# aspnetForm’). Valid (); чтобы явно проверить, действительна ли форма.

Вы можете назвать эту модель выбора, вместо отказа, описанного выше.

Обратите внимание: я также использую проверку jquery с помощью ASP.NET WebForms. Есть некоторые проблемы для навигации, но как только вы проходите через них, пользовательский опыт очень хорош.

Еще один (динамический) способ:

 $("form").validate().settings.ignore = "*"; 

Чтобы снова включить его, мы просто возвращаем значение по умолчанию:

 $("form").validate().settings.ignore = ":hidden"; 

Источник: https://github.com/jzaefferer/jquery-validation/issues/725#issuecomment-17601443

(Расширение @lepe и @redsquare для ASP.NET MVC + jquery.validate.unobtrusive.js )


Плагин проверки jQuery (а не Microsoft ненавязчивый) позволяет вам помещать class .cancel в кнопку отправки, чтобы полностью .cancel проверку (как показано в принятом ответе).

  To skip validation while still using a submit-button, add a class="cancel" to that input.   

(не путайте это с помощью type='reset' который является чем-то совершенно другим)

К сожалению, jquery.validation.unobtrusive.js проверки правильности (ASP.NET MVC) вызывает зависание поведения по умолчанию jquery.validate .

Это то, что я придумал, чтобы вы могли поместить .cancel на кнопку отправки, как показано выше. Если Microsoft когда-либо «исправляет» это, вы можете просто сохранить этот код.

  // restore behavior of .cancel from jquery validate to allow submit button // to automatically bypass all jquery validation $(document).on('click', 'input[type=image].cancel,input[type=submit].cancel', function (evt) { // find parent form, cancel validation and submit it // cancelSubmit just prevents jQuery validation from kicking in $(this).closest('form').data("validator").cancelSubmit = true; $(this).closest('form').submit(); return false; }); 

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

(Примечание: вам может понадобиться добавить button в селектор, если вы используете кнопки для отправки)

Этот вопрос старый, но я нашел другой способ – использовать $('#formId')[0].submit() , который получает элемент dom вместо объекта jQuery, тем самым минуя любые проверки. Эта кнопка представляет родительскую форму, содержащую вход.

  

Кроме того, убедитесь, что у вас нет имени input «submit», или оно отменяет функцию с именем submit .

Я обнаружил, что наиболее гибким способом является использование JQuery:

 event.preventDefault(): 

Например, если вместо отправки я хочу перенаправить, я могу сделать:

 $("#redirectButton").click(function( event ) { event.preventDefault(); window.location.href='http://www.skip-submit.com'; }); 

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

 $("#saveButton").click(function( event ) { event.preventDefault(); var postData = $('#myForm').serialize(); var jqxhr = $.post('http://www.another-end-point.com', postData ,function() { }).done(function() { alert("Data sent!"); }).fail(function(jqXHR, textStatus, errorThrown) { alert("Ooops, we have an error"); }) 

Когда вы выполните «event.preventDefault ();» вы обходите проверку.

 $("form").validate().settings.ignore = "*"; 

Или

 $("form").validate().cancelSubmit = true; 

Но без успеха в пользовательском обязательном валидаторе. Для динамического вызова вызова я создал поддельную скрытую кнопку отправки с этим кодом:

 var btn = form.children('input.cancel.fakeSubmitFormButton'); if (btn.length === 0) { btn = $(''); form.append(btn); } btn.click(); 

Теперь пропустите правильность проверки 🙂

У меня есть две кнопки для отправки формы, кнопка с именем save и exit обходит проверку:

 $('.save_exist').on('click', function (event) { $('#MyformID').removeData('validator'); $('.form-control').removeClass('error'); $('.form-control').removeClass('required'); $("#loanApplication").validate().cancelSubmit = true; $('#loanApplication').submit(); event.preventDefault(); }); 
  • Плагин jQuery Validation в веб-формах ASP.NET
  • Проверка формата адреса электронной почты с помощью Jquery.validate.js
  • Проверка jQuery: изменение сообщения об ошибке по умолчанию
  • Подтвердить, что дата окончания больше, чем дата начала с помощью jQuery
  • jQuery validate plugin: принимать буквы только?
  • Как проверить массив входов с помощью validate plugin jquery
  • jQuery проверить динамический входной массив
  • Проверка на стороне клиента jquery не работает в частичном представлении MVC3
  • jQuery Подтвердить плагин - проверка пароля - минимальные требования - Regex
  • jQuery Подтвердить плагин, требуется одно из двух полей
  • Условная валидация в asp.net MVC4
  • Давайте будем гением компьютера.