JQuery отключить проверку правил на одном поле - PullRequest
49 голосов
/ 18 мая 2010

Я использую 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'}}}">

Это прекрасно работает. Теперь у меня есть еще одно требование: некоторые поля отображаются и скрываются в соответствии с логикой на странице, и мне нужно отключить проверку скрытых полей, чтобы они не мешали отправке формы. Достаточно просто переключить требуемое: истинно на ложь и вернуться к истине. Только я не знаю как.

У кого-нибудь есть опыт?

Ответы [ 4 ]

81 голосов
/ 18 мая 2010

Просто добавьте правило игнорирования и определите селектор. В этом примере проверка будет игнорировать все элементы, которые имеют class="ignore"

$("#myform").validate({
   ignore: ".ignore"
})
36 голосов
/ 22 февраля 2013

Если вы используете ненавязчивую проверку JQuery в ASP.NET MVC, вам необходимо настроить параметры таким образом. Это из-за способа, которым 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;
}
6 голосов
/ 28 декабря 2012

Следуя ответу Гейба, вы также можете установить значение игнорирования по умолчанию, поэтому вам не нужно устанавливать его в каждой форме.

$.validator.setDefaults({ignore: ".ignore"});

Также обратите внимание, что поле ignore - это селектор jQuery, который используется в функции jQuery not(), поэтому можно использовать любой допустимый селектор, а не только простые классы.

Подробнее о других значениях по умолчанию, которые можно установить, см. Также http://docs.jquery.com/Plugins/Validation/validate#toptions.

3 голосов
/ 27 апреля 2013

Мне было лучше с $('.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]"

каждый из них ... и их комбинации

мой 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...