jQuery Validate - увімкнути перевірку для прихованих полів


186

У новій версії модуля перевірки jQuery 1.9 за замовчуванням перевірки прихованих полів ігнорується . Я використовую CKEditor для поля введення textarea, і він приховує поле і замінює його на iframe. Поле є, але перевірка відключена для прихованих полів. З плагіном перевірки версії 1.8.1 все працює як очікувалося.

Отже, моє питання полягає в тому, як увімкнути перевірку прихованих полів за допомогою плагіна v1.9 для перевірки.

Цей параметр не працює:

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

1
Дивіться також stackoverflow.com/questions/7952181 / ...
goodeye

Посилання для "перевірки прихованих ігнорованих полів" мертве.
Beepye

Перевірка для мене працює за замовчуванням <input type="text" name="myfield" id="myfield" required="required" style="display: none;">. Мені не потрібно було змінювати будь-які настройки або робити щось особливе.
squarecandy

Відповіді:


329

Автор плагіна каже, що ви повинні використовувати "квадратні дужки без лапок" ,[]

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

Реліз: Плагін перевірки 1.9.0: "... Інша зміна повинна полегшити налаштування форм із прихованими елементами. Вони тепер ігноруються за замовчуванням (опція" 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
    });

});

Редагувати :

Дивіться цю відповідь, як увімкнути перевірку в деяких прихованих полях, але все ж ігнорувати інші.


EDIT 2 :

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

Якщо ви боретеся з unobtrusive-validationплагіном, то замість цього зверніться до цієї відповіді: https://stackoverflow.com/a/11053251/594235


26
Можливо, голосуючий може дати мені якісь конструктивні відгуки. В іншому випадку відповідь є повністю самостійною, належним чином, дає приклади коду та технічно правильна відповідно до автора плагіна.
Спаркі

1
@StijnVanBael, ні, це неправда. Дивіться: jsfiddle.net/F4w92/1, а також дивіться мій другий коментар щодо відповіді Джеріка .
Sparky

4
Добре сказано @Sparky. Проголосований голос - це, мабуть, помста, я зіткнувся з тим самим ..
Омар

1
JSFiddle більше не працює, оскільки бібліотеки завантажуються в HTTP замість HTTPS. Оновлена ​​версія: jsfiddle.net/F4w92/31
hotips

1
Я також вважаю, що це не працює для мене, використовуючи останню версію, довелося використовувати: $ ("form"). Data ("validator"). Settings.ignore = ""; як інша відповідь від @James нижче
Марк Гомер

73

Це працювало для мене на веб-сайті ASP.NET MVC3, де я залишив рамки для встановлення ненав'язливої ​​перевірки тощо, якщо це комусь корисно:

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

2
Мені це також подобається, оскільки це означає, що я можу це робити за певних обставин, а не змінювати поведінку за замовчуванням.
Стів Оуен

5
Мені довелося це зробити так, оскільки використання .validate () для зміни параметрів не працювало.
Фарінья

1
це правильне рішення ненав'язливої ​​перевірки, я спробував усі інші рішення, вони могли працювати, якщо НЕ використовувати ненав'язливий. Якщо ви користуєтесь ненав'язливим, тут правильне місце.
Hakan Fıstık

Довелося використовувати цей метод також для ненав’язливої ​​перевірки для роботи з Bootstrap Accordion
bsod_

Коли я змінюю це, форма не підтверджується. Я використовую ненав’язливе ядро ​​.net
Offir Pe'er

64

Обов’язково поставте

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

НЕ всередині$(document).ready


2
Відмінна відповідь. Посилання на документацію корисно, щоб люди навчалися, але пряма відповідь є більш цінним. Він OP був на правильному шляху, але виведення його за межі $ (document).
Кевін Зич

3
@KevinZych, Мабуть, це абсолютно не має ніякої різниці $.validator.setDefaults(), розміщений він всередині або зовні рукоятки DOM. Порівняйте цей jsFiddle з цим jsFiddle .
Спаркі

Цікаво @Sparky, ваші загадки - чудовий доказ. Мені довелося б повернутися назад і подивитися на код, який я виправив, використовуючи це рішення, і з’ясувати, чому я прийшов до висновку, що він повинен знаходитися всередині DOM готового обробника. Мабуть, були інші причини.
Кевін Зіч

Джастін пояснює, чому запуск всередині документа doc Ready викликає проблеми. Однак ця відповідь не є вдалим варіантом, тому що важко гарантувати, що щось, що знаходиться поза документом, буде запущене ДО ДОКЛАДУ готового. Doc.ready не чекатиме запуску сценаріїв поза нею. Нічого особистого, але це не достовірна відповідь.
AaronLS

Нарешті, у мене є відповідь ... Дякую вам так
sp9

29

Тож я піду трохи глибше, чому це не працює, тому що я така людина, яка не може спати вночі, не знаючи ха-ха. Я використовую 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()функцію. Якщо він знаходить об’єкт валідатора, що зберігається з елементом форми, він просто повертає об'єкт валідатора замість створення іншого.


Дякую за детальну відповідь!
davidallyoung

Гарна робота, оскільки відповідь ОП не спрацювала для мене в MVC 5
Марк Гомер

Ваш аналіз мені дуже допоміг у вирішенні моїх проблем з валідацією. +1
pgcan

15

Це працювало для мене на сайті ASP.NET. Щоб увімкнути перевірку в деяких прихованих полях, використовуйте цей код

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

Щоб увімкнути перевірку всіх елементів форми, використовуйте цей $("form").data("validator").settings.ignore = "";

Зауважте, що використовуйте їх у межах $(document).ready(function() { })


8

Щойно доданий ignore: []на конкретній сторінці для конкретної форми, це рішення працювало для мене.

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


0

Перевірка працювала для мене під час подання форми, але вона не проводила перевірку реактивних подій при введенні до вибраних списків вибору.

Щоб виправити це, я додав наступне, щоб вручну запустити подію перевірки 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.


-15

Просто знайдіть текст ігнорування: ": приховано" у вашому файлі перевірки jquery та прокоментуйте його. Після коментаря це ніколи не втратить прихованих елементів для перевірки ...

Дякую


5
Ніколи не гарна ідея просто випадковим чином коментувати код у сторонній бібліотеці.
Жак
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.