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

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

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

Эта настройка не работает:

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

8 ответов

Решение

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

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

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

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

$.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 плагин, тогда, пожалуйста, обратитесь к этому ответу вместо этого: /questions/19226772/jquery-validate-vklyuchit-proverku-dlya-skryityih-polej/19226799#19226799

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

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

Не забудьте поставить

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Проверка работала для меня при отправке формы, но она не выполняла проверку, управляемую реактивными событиями, для ввода в выбранные списки выбора.

Чтобы исправить это, я добавил следующее, чтобы вручную запускать событие проверки jquery, которое добавляется библиотекой:

$(".chosen-select").each(function() {
  $(this).chosen().on("change", function() {
    $(this).parents(".form-group").find("select.form-control").trigger("focusout.validate");
  });
});

jquery.validate теперь добавит .valid класс в базовый список выбора.

Предостережение: это требует согласованного шаблона html для ввода вашей формы. В моем случае каждое поле ввода заключено вdiv.form-group, и каждый вход имеет .form-control.

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

Спасибо

Другие вопросы по тегам