JQuery отключает проверку правил в одном поле - программирование
Подтвердить что ты не робот

JQuery отключает проверку правил в одном поле

Я использую 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 должно быть достаточно. Только я не знаю, как.

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

4b9b3361

Ответ 1

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

$("#myform").validate({
   ignore: ".ignore"
})

Ответ 2

Если вы используете 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;
}

Ответ 3

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

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

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

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

Ответ 4

У меня было лучшее время с $('.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