в jQuery проверки - включить проверку на наличие скрытых полей
в новой версии jQuery validation plugin 1.9 по умолчанию проверка скрытых полей игнорируется. Я использую CKEditor для поля ввода textarea, и он скрывает поле и заменяет его iframe. Поле есть, но проверка отключена для скрытых полей. С проверкой плагина версии 1.8.1 все работает так, как ожидалось.
поэтому мой вопрос заключается в том, как включить проверку для скрытых полей с помощью плагина проверки v1.9.
этот параметр не работа:
$.validator.setDefaults({ ignore: '' });
8 ответов:
автор плагина говорит, что вы должны использовать "квадратные скобки без кавычек",
[]
http://bassistance.de/2011/10/07/release-validation-plugin-1-9-0/
Release: Validation Plugin 1.9.0: "...Еще одно изменение следует внести в настройку форм со скрытыми элементами проще, они теперь игнорируются по умолчанию (опция "игнорировать" имеет "скрытые" теперь по умолчанию). В теории, это может сломать существующий установка. В маловероятном случае, что это действительно так, вы можете исправить это установка для параметра ignore-значения " [] "(квадратные скобки без двойные кавычки.)"
изменить этот параметр для всех форм:
$.validator.setDefaults({ ignore: [], // any other default options and/or rules });
(это не обязательно, что
.setDefaults()
внутри
это сработало для меня, в течение ASP.NET сайт MVC3, где я оставил фреймворк для настройки ненавязчивой проверки и т. д., в случае, если это кому-то полезно:
$("form").data("validator").settings.ignore = "";
поэтому я собираюсь пойти немного глубже, чтобы понять, почему это не работает, потому что я тот человек, который не может спать по ночам, не зная ха-ха. Я использую 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(); };
в этот момент a валидатор объединит все настройки по умолчанию, которые были установлены, и присоединит их к валидатору формы. Когда вы смотрите на код, который выполняет проверку, подсветку, подсветку и т. д., Все они используют валидатор.объект настроек для извлечения свойства игнорировать. Поэтому нам нужно убедиться, что если мы должны установить ignore с помощью метода setDefaults, то это должно произойти до $("форма").метод validate() называется.
если вы используете Asp.net MVC и ненавязчивый плагин, тогда вы будете поймите, посмотрев на javascript, что проверка вызывается в документе.готовый. я также назвал мои setDefaults в документе.готовый блок, который будет выполняться после скриптов, jQuery validate и ненавязчивый, потому что я определил эти скрипты в html перед тем, который имеет вызов в нем. Поэтому мой вызов, очевидно, не повлиял на функциональность по умолчанию пропуска скрытых элементов во время проверки. Здесь есть несколько вариантов.
1 - вы могли бы, как указал Хуан Мелладо, иметь вызов вне документа.готов, который будет выполняться, как только скрипт будет загружен. Я не уверен в сроках этого, так как браузеры теперь способны выполнять параллельную загрузку скриптов. Если я просто слишком осторожен, пожалуйста, поправьте меня. Кроме того, есть, вероятно, способы обойти это, но для моих нужд я не пошел по этому пути.
вариант 2a - безопасная ставка в моих глазах - просто заменить
$.validator.setDefaults({ ignore: '' });
внутри документа.готовое событие с$("form").data("validator").settings.ignore = "";
. Это изменит свойство ignore, которое фактически используется jQuery validate при выполнении каждой проверки ваших элементов для данной формы.опции 2b - после просмотра кода немного больше вы также можете использовать
$("form").validate().settings.ignore = "";
как способ установки свойства игнорировать. Причина в том, что при просмотре функции validate она проверяет, был ли объект validator уже сохранен для формы элемент через
просто добавил
ignore: []
на конкретной странице для конкретной формы это решение работало для меня.$("#form_name").validate({ ignore: [], onkeyup: false, rules: { }, highlight:false, });
Это сработало для меня в течение ASP.NET сайт. Чтобы включить проверку на некоторые скрытые поля используйте этот код
$("form").data("validator").settings.ignore = ":hidden:not(#myitem)";
чтобы включить проверку для всех элементов формы используйте этот
$("form").data("validator").settings.ignore = "";
обратите внимание, что использовать их в
$(document).ready(function() { })
просто найдите текст игнорировать:": hidden" в файле проверки jquery и прокомментируйте его. После комментария это никогда не потеряет никаких скрытых элементов для проверки...
спасибо
Comments