Сделать валидатор jQuery проверять скрытые входы на submit [duplicate]

Другим сценарием является то, что вы нанесли нулевой объект в тип значения . Например, код ниже:

object o = null;
DateTime d = (DateTime)o;

Он выкинет NullReferenceException в роли. В приведенном выше примере это кажется совершенно очевидным, но это может произойти в более «поздних связующих» сложных сценариях, где нулевой объект был возвращен из некоторого кода, которого вы не являетесь, и приведение, например, генерируется некоторой автоматической системой.

Одним из примеров этого является этот простой фрагмент привязки ASP.NET с элементом управления календарем:

" />

Здесь SelectedDate на самом деле является свойством - типа DateTime - типа Calendar Web Control, и привязка может отлично вернуть что-то null. Неявный генератор ASP.NET создаст кусок кода, который будет эквивалентен приведенному выше методу. И это поднимет NullReferenceException, что довольно сложно определить, потому что он лежит в сгенерированном ASP.NET коде, который компилирует отлично ...

162
задан Shaman 11 December 2011 в 21:08
поделиться

8 ответов

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

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

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

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

$.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:

См. этот ответ о том, как включить проверку некоторых скрытых полей, но все равно игнорировать другие.


EDIT 2:

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

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

285
ответ дан Community 24 August 2018 в 05:25
поделиться

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

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

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

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

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

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

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

26
ответ дан AaronLS 24 August 2018 в 05:25
поделиться

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

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

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

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

6
ответ дан angela.mirjalili 24 August 2018 в 05:25
поделиться

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

$("#form_name").validate({
        ignore: [],
        onkeyup: false,
        rules: {            
        },      
        highlight:false,
    });
7
ответ дан Benno 24 August 2018 в 05:25
поделиться

Обязательно установите

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

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

62
ответ дан Hakam Fostok 24 August 2018 в 05:25
поделиться

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

$("form").data("validator").settings.ignore = "";
66
ответ дан James Morcom 24 August 2018 в 05:25
поделиться

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

Спасибо

-12
ответ дан user835525 24 August 2018 в 05:25
поделиться

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

jQuery("#form_name").validate().settings.ignore = "";
0
ответ дан Waqas Bukhary 24 August 2018 в 05:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: