JQuery Validate - включить проверку скрытых полей

В новой версии плагина проверки jQuery 1.9 по умолчанию проверка скрытых полей игнорируется. Я использую CKEditor для поля ввода textarea, и он скрывает поле и заменяет его iframe. Поле есть, но проверка недействительна для скрытых полей. С плагином проверки версии 1.8.1 все работает так, как ожидалось.

Итак, мой вопрос заключается в том, как включить проверку скрытых полей с помощью плагина v1.9 validation.

Этот параметр не работает:

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

Ответ 1

Автор плагина говорит, что вы должны использовать "квадратные скобки без кавычек", []

http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/

Релиз: плагин Validation 1.9.0: "... Еще одно изменение должно сделать установку форм со скрытыми элементами проще, теперь они игнорируются по умолчанию (опция" ignore "имеет": hidden "теперь по умолчанию). Теоретически это может нарушить существующее настроить. В маловероятном случае, если это действительно так, вы можете исправить это установка опции игнорирования на" [] "(квадратные скобки без цитаты)".

Чтобы изменить эту настройку для всех форм:

$.validator.setDefaults({ 
    ignore: [],
    // any other default options and/or rules
});

(Не требуется, чтобы .setDefaults() находился внутри функции document.ready)

ИЛИ для одной конкретной формы:

$(document).ready(function() {

    $('#myform').validate({
        ignore: [],
        // any other options and/or rules
    });

});

ИЗМЕНИТЬ

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


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

Прежде чем оставлять комментарии, что "это не работает", имейте в виду, что OP просто спрашивает плагин jQuery Validate и его вопрос имеет ничего, чтобы сделать так, как ASP.NET, MVC или любая другая инфраструктура Microsoft могут изменить нормальное ожидаемое поведение плагина. Если вы используете фреймворк Microsoft, функционирование плагина jQuery Validate по умолчанию перезаписывается плагином Microsoft unobtrusive-validation.

Если вы боретесь с плагином unobtrusive-validation, тогда, пожалуйста, обратитесь к этому ответу: fooobar.com/questions/1326/...

Ответ 2

Это сработало для меня на узле ASP.NET MVC3, где я оставил фреймворк для настройки ненавязчивой проверки и т.д., если он кому-то полезен:

$("form").data("validator").settings.ignore = "";

Ответ 3

Обязательно установите

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

НЕ внутри $(document).ready

Ответ 4

Итак, я собираюсь немного глубже понять, почему это не работает, потому что я такой человек, который не может спать по ночам, не зная ха-ха. Я использую jQuery validate 1.10 и Microsoft jQuery Unobtrusive Validation 2.0.20710.0, который был опубликован в 1/29/2013.

Я начал с поиска метода setDefaults в jQuery Validate и нашел его в строке 261 неустановленного файла. Вся эта функция действительно объединяет ваши настройки json в существующие $.validator.defaults, которые инициализируются с использованием свойства ignore, которое установлено как ": hidden", а также другие значения по умолчанию, определенные в jQuery Validate. Поэтому в этот момент мы переопределили игнорирование. Теперь давайте посмотрим, на что ссылается свойство defaults.

Когда я проследил код, чтобы увидеть, где ссылается $.validator.defaults. Я заметил, что это используется только конструктором для валидатора формы, строка 170 в jQuery проверяет unminified файл.

// constructor for validator
$.validator = function( options, form ) {
    this.settings = $.extend( true, {}, $.validator.defaults, options );
    this.currentForm = form;
    this.init();
};

В этот момент валидатор объединит все установленные по умолчанию настройки и добавит их в средство проверки формы. Когда вы смотрите на код, который выполняет проверку, подсветку, подсвечивание и т.д., Все они используют объект validator.settings, чтобы вытащить свойство ignore. Поэтому нам нужно убедиться, что мы должны установить игнорирование с помощью метода setDefaults, тогда он должен произойти до $( "form" ). Вызывается функция validate().

Если вы используете Asp.net MVC и ненавязчивый плагин, тогда вы поймете, посмотрев на javascript, который проверяет, вызывается в document.ready. Я также называл мои setDefaults в блоке document.ready, который будет выполняться после скриптов, jquery проверяет и ненавязчив, потому что я определил эти сценарии в html перед тем, который имеет в нем вызов. Таким образом, мой вызов, очевидно, не повлиял на функциональность по умолчанию пропуска скрытых элементов во время проверки. Здесь есть несколько вариантов.

Вариант 1. Вы могли бы, как указал Хуан Мелладо, вызвать вызов за пределами документа. Теперь он будет выполняться, как только загрузится script. Я не уверен в сроках этого, так как браузеры теперь могут выполнять параллельную загрузку script. Если я просто буду осторожен, то, пожалуйста, поправьте меня. Кроме того, возможно, это возможно, но для моих нужд я не пошел по этому пути.

Вариант 2a. Безопасная ставка в моих глазах - просто заменить $.validator.setDefaults({ ignore: '' }); внутри события document.ready с помощью $("form").data("validator").settings.ignore = "";. Это изменит свойство ignore, которое фактически используется проверкой jQuery при выполнении каждой проверки для ваших элементов для данной формы.

Параметры 2b. Еще раз просмотрев код, вы также можете использовать $("form").validate().settings.ignore = ""; как способ установки свойства ignore. Причина в том, что при просмотре функции validate он проверяет, был ли объект-валидатор уже сохранен для элемента формы через функцию $.data(). Если он находит объект валидатора, хранящийся в элементе формы, он просто возвращает объект validator вместо создания другого.

Ответ 5

Просто добавленный ignore: [] на конкретной странице для конкретной формы, это решение сработало для меня.

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });

Ответ 6

Это работало для меня на сайте ASP.NET. Чтобы включить проверку в некоторых скрытых полях, используйте этот код

$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";

Чтобы включить проверку для всех элементов формы, используйте этот   $("form").data("validator").settings.ignore = "";

Обратите внимание, что используйте их в $(document).ready(function() { })

Ответ 7

Это работает для меня.

jQuery("#form_name").validate().settings.ignore = "";

Ответ 8

Просто найдите текст ignore: ": hidden" в файле проверки jquery и прокомментируйте его. После комментариев это никогда не потеряет никаких скрытых элементов для проверки...

Спасибо