jQuery Validate - включить проверку для скрытых полей - PullRequest
173 голосов
/ 11 декабря 2011

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

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

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

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

Ответы [ 8 ]

305 голосов
/ 19 декабря 2011

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

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

Релиз:Плагин валидации 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 :

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

Если вы боретесь с плагином unobtrusive-validation, обратитесь кэтот ответ вместо: https://stackoverflow.com/a/11053251/594235

68 голосов
/ 15 июня 2012

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

$("form").data("validator").settings.ignore = "";
63 голосов
/ 08 апреля 2012

Обязательно поместите

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

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

26 голосов
/ 29 января 2013

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

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

// 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, что validate вызывается в document.ready. Я также вызвал мои setDefaults в блоке document.ready, который будет выполнятьсяпосле сценариев jquery проверяет и ненавязчив, потому что я определил эти сценарии в html перед тем, в котором есть вызов.Таким образом, мой вызов, очевидно, не повлиял на функциональность по умолчанию пропуска скрытых элементов во время проверки.Здесь есть несколько вариантов.

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

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

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

9 голосов
/ 10 июня 2016

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

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

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

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

8 голосов
/ 27 ноября 2013

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

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });
0 голосов
/ 16 января 2017

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

jQuery("#form_name").validate().settings.ignore = "";
0 голосов
/ 20 июня 2013

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

Спасибо

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