Тож я піду трохи глибше, чому це не працює, тому що я така людина, яка не може спати вночі, не знаючи ха-ха. Я використовую jQuery validate 1.10 та Microsoft jQuery Unobtrusive Validation 2.0.20710.0, опублікований 29.01.2013.
Я почав з пошуку методу setDefaults в jQuery Validate і знайшов його в рядку 261 незміненого файлу. Ця функція дійсно полягає в об'єднанні ваших параметрів json у існуючі, $.validator.defaults
які ініціалізуються з властивістю ігнорування, встановленим на ": приховано", а також іншими за замовчуванням, визначеними у 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 для витягування властивості ігнорування. Тому нам потрібно переконатися, що якщо ми встановимо ігнор методом setDefaults, то це має відбутися до виклику $ ("форми"). Validate ().
Якщо ви використовуєте Asp.net MVC і ненав'язливий плагін, ви зрозумієте, подивившись на JavaScript, що перевіряється виклик у документі document.ready. Я також назвав свій setDefaults в блоці document.ready, який буде виконуватися після скриптів, jquery перевіряє та ненав'язливий, тому що я визначив ці сценарії в html перед тим, який має виклик у ньому. Тож мій виклик, очевидно, не вплинув на функціональність за замовчуванням пропускання прихованих елементів під час перевірки. Тут є пара варіантів.
Варіант 1 - Ви можете, як зазначив Хуан Мелладо, мати виклик поза документом, який би виконувався, як тільки сценарій був завантажений. Я не впевнений у термінах цього, оскільки браузери тепер здатні робити паралельне завантаження сценарію. Якщо я просто надмірно обережний, то, будь ласка, виправте мене. Також, мабуть, є шляхи навколо цього, але для моїх потреб я не пішов цим шляхом.
Варіант 2а - Безпечна ставка в моїх очах - просто замінити $.validator.setDefaults({ ignore: '' });
внутрішню сторону документа $("form").data("validator").settings.ignore = "";
. Це дозволить змінити властивість ігнорування, яка фактично використовується jQuery validate під час кожної перевірки ваших елементів для даної форми.
Варіанти 2b - Заглянувши в код трохи більше, ви також можете використовувати його $("form").validate().settings.ignore = "";
як спосіб встановлення властивості ігнорування. Причина полягає в тому, що, переглядаючи функцію перевірки, вона перевіряє, чи об’єкт валідатора вже збережений для елемента форми через $.data()
функцію. Якщо він знаходить об’єкт валідатора, що зберігається з елементом форми, він просто повертає об'єкт валідатора замість створення іншого.