У меня есть форма с несколькими полями, которые я проверяю (некоторые с методами, добавленными для пользовательской проверки) с отличным плагином JQuery Validation от Jörn Zaeffere. Как вы обходите проверку с помощью указанных элементов управления отправкой (другими словами, проверку запуска с одними входами отправки, но не проверку с другими)? Это будет похоже на ValidationGroups со стандартными элементами управления валидатора ASP.NET.
Моя ситуация:
Это с 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'
});
Ответы:
Вы можете добавить класс CSS
cancel
к кнопке отправки, чтобы подавить проверкунапример
Смотрите документацию по этой функции в jQuery Validator: Пропуск проверки при отправке
РЕДАКТИРОВАТЬ :
Вышеуказанная техника устарела и заменена
formnovalidate
атрибутом.источник
$('input[type=submit]').addClass('cancel')
класс должен присутствовать при загрузке страницы.Другой (недокументированный) способ сделать это, это позвонить:
на событие нажатия кнопки (например).
источник
$("form").validate().cancelSubmit = true;
. Я пытался$("form").validate().cancelSubmit = false;
и звонил$("form").validate();
при отправке моей кнопки отправки. Спасибо$(yourForm).data('validator').cancelSubmit = false;
СпасибоЕще один (динамический) способ:
И чтобы снова включить его, мы просто вернули значение по умолчанию:
Источник: https://github.com/jzaefferer/jquery-validation/issues/725#issuecomment-17601443
источник
Добавить атрибут formnovalidate для ввода
Добавление class = "cancel" теперь устарело
Смотрите документы для пропуска проверки при отправке по этой ссылке
источник
При подключении проверки вы можете использовать опцию onsubmit: false (см. Документацию ), которая не будет проверяться при отправке формы. А затем в кнопку asp: добавьте OnClientClick = $ ('# aspnetForm'). Valid (); явно проверить, если форма действительна.
Вы можете назвать это моделью отказа вместо отказа, описанного выше.
Обратите внимание, я также использую проверку jquery с ASP.NET WebForms. Есть некоторые проблемы для навигации, но как только вы их пройдете, пользовательский опыт будет очень хорошим.
источник
(Расширение
@lepe
и@redsquare
ответ наASP.NET MVC
+jquery.validate.unobtrusive.js
)JQuery плагин проверки (не Microsoft ненавязчивый один) позволяет поставить
.cancel
класс на кнопке , чтобы представить проверки объездной полностью (как показано в общепринятом ответа).(не путайте это с
type='reset'
чем-то совершенно другим)К сожалению
jquery.validation.unobtrusive.js
код обработки проверки (ASP.NET MVC) как бы портит поведение плагина jquery.validate по умолчанию .Это то, что я придумал, чтобы позволить вам
.cancel
нажать кнопку отправки, как показано выше. Если Microsoft когда-нибудь «исправит» это, вы можете просто удалить этот код.Примечание. Если при первой попытке окажется, что это не работает - убедитесь, что вы не обращаетесь к серверу и не видите страницу, созданную сервером, с ошибками. Вам нужно будет обойти проверку на стороне сервера некоторыми другими способами - это просто позволяет отправлять форму на стороне клиента без ошибок (альтернативой будет добавление
.ignore
атрибутов ко всему в вашей форме).(Примечание: вам может потребоваться добавить
button
в селектор, если вы используете кнопки для отправки)источник
Pay with PayPal
кнопку отправки$(this).closest('form').data("validator", null).unbind().submit();
Это установит валидатор в null и отменит его. После этого он отправит форму. Вы можете сбросить проверку по этой строке:$.validator.unobtrusive.parse($("#YourUniqueFormId"));
.cancel
классом. примечание: если вы используете кнопку отправки type = 'image', то.cancel
класс не будет работать , если не изменить ,":submit"
чтобы":submit,:image"
в Jquery оригинальный плагин проверкиИли
Но без успеха в кастомах требуется валидатор. Для динамического вызова отправки я создал поддельную скрытую кнопку отправки с этим кодом:
Теперь пропустите проверку правильно :)
источник
$("form").validate().settings.ignore = "class-name";
Этот вопрос старый, но я нашел другой способ его использования
$('#formId')[0].submit()
элемент dom вместо объекта jQuery, что позволяет обойти любые проверки правильности. Эта кнопка отправляет родительскую форму, которая содержит ввод.Кроме того, убедитесь, что у вас нет
input
названного «submit», или оно переопределяет названную функциюsubmit
.источник
Я обнаружил, что наиболее гибкий способ - использовать JQuery:
Например, если вместо отправки я хочу перенаправить, я могу сделать:
или я могу отправить данные в другую конечную точку (например, если я хочу изменить действие):
Как только вы сделаете 'event.preventDefault ();' вы обходите проверку.
источник
У меня есть две кнопки для отправки формы, кнопка с именем сохранить и выйти обходит проверку:
источник
Вот самая простая версия, надеюсь, она кому-нибудь поможет,
источник
также работает
источник