Ответ 1
Просто добавьте правило игнорирования и определите селектор.
В этом примере проверка будет игнорировать все элементы с class="ignore"
$("#myform").validate({
ignore: ".ignore"
})
Я использую MVC для создания форм, которые генерируются во время выполнения. Для проверки я пробую свою руку в библиотеке проверки jQuery, которая очень удобна в использовании. У меня есть выражение проверки каждого поля в атрибуте cdata тега
<input type="text" name="xyz" id="xyz" class="defaultTextBox"
cdata="{validate:{required:true, decimal:true, messages:
{required:'Please enter an decimal value',
decimal:'Please enter a valid decimal'}}}">
Это прекрасно работает. Теперь еще одно требование: некоторые поля отображаются и скрыты в соответствии с логикой на странице, и мне нужно отключить проверку на скрытых полях, чтобы они не мешали отправке формы. Просто переключить требуемое: true для false и back to true должно быть достаточно. Только я не знаю, как.
У кого-нибудь есть опыт?
Просто добавьте правило игнорирования и определите селектор.
В этом примере проверка будет игнорировать все элементы с class="ignore"
$("#myform").validate({
ignore: ".ignore"
})
Если вы используете ASP.NET MVC Unobtrusive JQuery validation, вам нужно установить настройки таким образом. Это связано с тем, как Microsoft на самом деле вызывает проверку jQuery. Это должно быть безопасным для использования внутри метода ready
.
Изменить: см. комментарий Кори ниже, прежде чем копировать это. Это мой оригинальный код
$("form").data("validator").settings.ignore = ".data-val-ignore, :hidden, :disabled";
Затем я просто применяю класс .data-val-ignore
к вещам, которые не проверяются.
Обратите внимание, что вы, вероятно, захотите добавить :hidden
, который фактически является поведением игнорирования по умолчанию, определенным в jquery.validate.js
. Мне нравится добавлять :disabled
тоже.
$.extend($.validator, {
defaults: {
messages: {},
groups: {},
rules: {},
errorClass: "error",
validClass: "valid",
errorElement: "label",
focusInvalid: true,
errorContainer: $([]),
errorLabelContainer: $([]),
onsubmit: true,
ignore: ":hidden", // default for ignore in jquery.validate.js
ignoreTitle: false,
onfocusin: function( element, event ) {
this.lastActive = element;
И, наконец, вы можете захотеть его стилизовать - особенно полезно при отладке.
.data-val-ignore
{
background: #eee;
}
В ответ на ответ Gabe вы также можете установить значение игнорирования как значение по умолчанию, поэтому вам не нужно устанавливать его в каждой форме.
$.validator.setDefaults({ignore: ".ignore"});
Также обратите внимание: поле ignore - это селектор jQuery, который используется в функции jQuery not()
, поэтому можно использовать любой допустимый селектор, а не только простые классы.
См. также http://docs.jquery.com/Plugins/Validation/validate#toptions для получения подробной информации о других значениях по умолчанию, которые можно установить.
У меня было лучшее время с $('.multiselect').rules('remove');
в моем случае по какой-либо причине добавление .cancel
или .data-val-ignore
как для $.validator.setDefaults
, так и для $('.multiselect')
не исправить.
Я также пробовал
$('select[multiple][data-val]').removeAttr('data-val').removeAttr('data-val-number').addClass('data-val-ignore').validate({ ignore: "[multiple]" });
$.validator.setDefaults({ ignore: ":hidden,:disabled,.data-val-ignore" });
$('.multiselect').closest('form').data('validator').settings.ignore = ":hidden,:disabled,.data-val-ignore, .data-val-ignore *";
$('.multiselect').data('validator').settings.ignore = "[multiselect]"
каждый из этих... и их комбинаций
my jquery.validate.js
был
/*! jQuery Validation Plugin - v1.11.0 - 2/4/2013
* https://github.com/jzaefferer/jquery-validation
* Copyright (c) 2013 Jörn Zaefferer; Licensed MIT */
jquery был
jQuery JavaScript Library v1.9.1 - Дата: 2013-2-4