2008-10-15 3 views
145

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

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

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

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

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

var container = $("#<%= Form.ClientID %> div.validationSuggestion"); 

$('#<%= Form.ClientID %>').validate({   
    errorContainer: container, 
    errorLabelContainer: $("ul",container), 
    rules: { 
     <%= YesNo.UniqueID %>: { required: true }, 
     <%= ShortText.UniqueID %>: { required: true } // etc. 

    }, 
    messages: { 
     <%= YesNo.UniqueID %>: 'A message.', 
     <%= ShortText.UniqueID %>: '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' 
}); 
+0

также указать ключевое слово возвращения на кнопке, чтобы она не будет перемещаться away http://technote.in/TechNote/Forums/AspnetReply.aspx?post_id=134 – 2011-01-08 05:59:18

ответ

255

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

например

<input class="cancel" type="submit" value="Save" /> 

Смотрите документацию JQuery Validator этой функции здесь: Skipping validation on submit


РЕДАКТИРОВАТЬ:

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

<input formnovalidate="formnovalidate" type="submit" value="Save" /> 
+6

Фантастический - спасибо :) – Aaron 2010-06-13 08:22:01

+1

Работает ли он с ? Я добавил class = "cancel" и он не работает. Я использую MVC2 с MicrosoftMvcValidation. Спасибо. – VinnyG 2010-12-13 22:56:54

+4

@VinnyG - не используется MicrosoftMvcValidation (и никогда не будет) - это не то же самое, что проверка jquery. – redsquare 2010-12-13 23:02:23

10

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

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

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

94

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

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

на события нажатия кнопки (например).

3

(Расширение @lepe-х и @redsquare ответ на ASP.NET MVC + jquery.validate.unobtrusive.js)


jquery validation plugin (не Microsoft ненавязчивый один) позволяет поставить .cancel класс на кнопке представить, чтобы полностью обойти проверку (как показано в принятом ответе).

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

    <input type="submit" name="submit" value="Submit"/> 
    <input type="submit" class="cancel" name="cancel" value="Cancel"/> 

(не путать с type='reset' что-то совершенно другое)

К сожалению jquery.validation.unobtrusive.js проверки обработки (ASP.NET MVC) код любопытных винтов вверх jquery.validate plugin's default behavior.

Это то, что я придумал, чтобы вы могли поставить .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; 
    }); 

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

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

1

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

<input type='button' value='SubmitWithoutValidation' onclick='$(this).closest('form')[0].submit()'/> 

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

10

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

<input type="submit" name="go" value="Submit"> 
    <input type="submit" formnovalidate name="cancel" value="Cancel"> 

Добавление класса = "отменить" теперь осуждается

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

1

Я обнаружил, что наиболее гибкий способ сделать использование 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"); 
    }) 

После того как вы do 'event.preventDefault();' вы обходите проверку.

0

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

$('.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(); 
}); 
0
$("form").validate().settings.ignore = "*"; 

Или

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

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

var btn = form.children('input.cancel.fakeSubmitFormButton'); 
if (btn.length === 0) { 
    btn = $('<input name="FakeCancelSubmitButton" class="cancel fakeSubmitFormButton hide" type="submit" formnovalidate value="FakeCancelSubmitButton" />'); 
    form.append(btn); 
} 
btn.click(); 

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

 Смежные вопросы

  • Нет связанных вопросов^_^