2015-05-12 4 views
0

Настройки по умолчанию не работают. Команда «setdefaults» ничего не делает.JQuery Проверка параметров по умолчанию не работает

На моей странице может быть много разных форм и вещей. Но по какой-то причине он всегда игнорирует отображение: ни один «select box» «select # ffe». FFE - это выбранный флажок, поэтому он скрывает поле выбора и, таким образом, форма не проверяет его.

В разделе правил текстовые поля проверяют штраф, но поле выбора не проверяется.

Вот мой jquery.ready:

$.validator.setDefaults({ ignore: ":hidden:not(select)" }); 
     var validator = $("select#ffe").closest("form").data('validator'); 
     console.log("V1: ", validator.settings.ignore); 

     //validator.settings.ignore = ":hidden:not(select)"; 
     console.log("V1: ", validator.settings.ignore); 
     $("select#ffe").closest("form").validate({ 
      settings: { 
       ignore: ":hidden:not(select)" 
       }, 
      rules: { 
      //....... skipping some rules....... 
}); 

$("select#ffe").rules("add", { required: true }); // chosen invisible select box 

     console.log("V1: ", validator.settings.ignore); 

Бревно консоль V1 не когда-либо изменится с "V1:: скрытый".

Если вы попытаетесь установить «validator.settings.ignore =»: hidden: not (select) »[прокомментировано, потому что это не работает], это даст вам другую ошибку при отправке формы, заявив, что не может прочитать« валидатор ». settings.rules ", потому что он не определен. Причудливая ошибка в jquery.validate.js, потому что он говорит, что validator.settings пуст, и это вызвано тем, что вы прямо игнорируете игнорирование.

Ошибка указывает на инструкцию if здесь в jquery.validate .js:

staticRules: function(element) { 
     var rules = {}; 
     var validator = $.data(element.form, "validator"); 
     if (validator.settings.rules) { // BROKEN BECAUSE VALIDATOR.SETTINGS IS EMPTY. 

Я использую:

JQuery Validation Plugin 1.11.1

JQuery 1.11.1.js

ответ

1

Как вы можете видеть через лог консоли, .setDefaults() работает: http://jsfiddle.net/rop59zw4/


Ваш селектор не так ... ":hidden:not(select)" должно быть ":hidden:not('select')".

Котировки вокруг select отсутствовали, так что он искал переменную под названием select вместо тегов элементов select.

Работа DEMO: http://jsfiddle.net/rop59zw4/


FYI - Существует нет такого .validate() опция называется settings. Любой вариант помещается внутри settings бы пренебречь или, возможно, ломать вещи ...

$('form').validate({ 
     settings: { // <-- not a valid option 
      ignore: ":hidden:not('select')" // <- not considered at all 
     }, 
     rules: { ... 

Этот пример показывает, что все в несуществующие settings объекта полностью игнорируются.

DEMO: http://jsfiddle.net/gmmauz9z/


Если вы уже установили ignore в .setDefaults(), а затем установить его в .validate() бы над поездкой .setDefaults(). Это позволяет вам иметь набор параметров по умолчанию для нескольких форм с возможностью переустановки в отдельной форме.(Примечание: метод .validate() не может быть вызван несколько раз на одной и той же форме, только первый экземпляр используется, а все остальные игнорируются.).

Этот пример показывает .validate() варианты, принимая приоритет над .setDefaults опций.

DEMO: http://jsfiddle.net/bjgb31tj/

+0

Я не думаю, что это проблема. Я даже не могу изменить настройки по умолчанию jquery.validate. Я даже не могу изменить его вручную. Он по-прежнему говорит: «скрыто» для «игнорировать». Он никогда не меняется на выбранный. Так что это еще до проблемы, которую вы упомянули. ТАКЖЕ в вашей скрипке с помощью «select» vs select ничего не меняет. – Dexter

+0

@Dexter, снова посмотрите на мой ответ. У вас есть другие проблемы, которые ломают ситуацию. См. Журнал консоли здесь: http://jsfiddle.net/01ww4nna/ – Sparky

+0

Да, я имею в виду, что ваша скрипка, похоже, работает независимо. Но в моих избранных как-то мешает, может быть, из-за AJAX или выбранной магии. параметр validator.settings.ignore, похоже, не изменяется, чтобы не выбирать. – Dexter

Смежные вопросы