2014-12-01 3 views
1

У меня есть форма с элементом псевдо-выбора. Элемент псевдовыбора представляет собой выпадающее меню. Когда один из выпадающих элементов нажат, скрытому вводу присваивается значение, присвоенное этому элементу. Я использую jQuery.validate для проверки формы. Простое правило проверки привязано к скрытому вводу. Если вход не имеет значения, скрытый ввод и псевдовыбор задаются классом ошибок и отображается сообщение об ошибке.jQuery.validate и скрытый ввод

Моя проблема заключается в том, что изменение значения скрытого ввода не приводит к событиям изменения, блокировки или размытия. Если к скрытому входу применяется состояние ошибки, это состояние остается после ввода допустимого значения. Только когда форма снова отправляется, вход правильно проверяется.

Поскольку jQuery.validate позволяет проверять скрытые входы, мне интересно, есть ли какая-либо конфигурация или метод, который обрабатывает эту проблему.

EDIT:

$form.validate({ 
    ignore: false, 
    rules: { 
     'firstname': 'required', 
     'lastname': 'required', 
     'org': 'required', 
     'role': 'required', 
     'email': { 
      required: true, 
      email: true 
     } 
    }, 
    messages: { 
     'firstname': 'Please enter your first name', 
     'lastname': 'Please enter your last name', 
     'org': 'Please enter your organization', 
     'role': 'Please select your role', 
     'email': 'Please enter your email' 
    }, 
    errorPlacement: function(error, element) { 
     var $errMessage = $('.js-err-message'); 

     $errMessage.removeClass('js-hidden'); 

     $(error).each(function(){ 
      $errMessage.append(error); 

      if (element.is('#role-input')) { 
       $('.pseudo-select').addClass('mad-error'); 
      } 
     }); 

    } 
}); 
+1

Вам следовало бы опубликовать весь соответствующий код –

+0

Извините, я не думаю, что код был строго релевантным. Мой вопрос о возможностях jQuery.validate в целом, а не о проблеме с моим кодом. – maxhallinan

+0

Соответствующий код будет содержать _any_ код, необходимый для воспроизведения проблемы. В вашем случае это экономит время людей, когда они создают демо для своего ответа. Это также помогает будущим читателям лучше понять проблему/решение, если у них есть аналогичная проблема. Благодарю. – Sparky

ответ

5

Используя плагин JQuery Validation, это стандартные события, которые инициируют проверку на конкретного элемента (последний немного отличается) ...

  • набрав в поле
  • выбора из списка
  • нажав кнопку флажок или радио
  • теряет фокус ввода элемента
  • нажав на кнопку отправки (всей форма утверждена)

Поскольку ни одна из этих вещей не срабатывает, когда скрытый элемент изменяет значение, вы должны будете триггер это самостоятельно, используя the .valid() method для проверки элемента.

Вы не указали нам никакого кода, не говоря уже о коде, который изменяет значение скрытого элемента, поэтому я могу дать вам нечто общее. Вы можете поместить .valid() код в любой функции используется для изменения значения ...

  • изменить значение скрытого элемента
  • вызова .valid() для проверки скрытого элемента

    $(document).ready(function() { 
    
        $('#myform').validate({ // initialize plugin 
         // your options 
        }); 
    
        $('#some_button').on('click', function() { 
         // some imaginary button that changes the hidden value 
         $('input[name="myHiddenElement"]').val('newvalue'); // <- change the hidden value 
         $('input[name="myHiddenElement"]').valid(); // <- triggers validation on the hidden element 
        }); 
    
    }); 
    

Вам, скорее всего, придется использовать другие параметры плагина, такие как the errorPlacement option, чтобы правильно разместить сообщение об ошибке label в вашем макете, иначе оно будет плавать так meplace после скрытого элемента.

+0

Благодарим за предложение использовать метод valid(). Это будет работать отлично.Что касается вашей реализации, события изменения не срабатывают по скрытым элементам при изменении значения с помощью JavaScript: http://stackoverflow.com/questions/12580761/hidden-input-change-event – maxhallinan

+0

@maxhallinan, спасибо, я отредактирую свой ответ и посмотрите на это. – Sparky

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