Как заставить jQuery проверять функцию успеха для работы со скрытым полем ввода?

У меня есть форма, проверяемая jQuery.validate. Используя параметр errorPlacement, у меня есть собственный набор функций для проверки ошибок в реальном времени. Используя опцию успеха, у меня есть собственный набор функций, чтобы избавиться от сообщений об ошибках и заменить их.

Все отлично работает, за исключением того, что моя проверка скрытых полей работает только при отправке. С опцией успеха jQuery.validate отлично работает для всех других полей, кроме моих скрытых полей. Я использую скрытые поля для объединения значений из нескольких текстовых полей и флажков. Вот пример моей дилеммы с тремя полями даты рождения: день, месяц, год:

HTML:

<label for="birthmonth">Birthdate</label></div>
<div class="birthfield1"><input type="text" id="birthmonth" name="birthmonth" class="ignore" /></div>
<div class="birthfield23"><input type="text" id="birthday" name="birthday" class="ignore" /></div>
<div class="birthfield23"><input type="text" id="birthyear" name="birthyear" class="ignore" /></div>
<div class="errorparent"><input id="birthdate"  name="birthdate" type="hidden" /><div class="norederrorx errordetails2">&nbsp;</div></div>

jQuery/javascript для обновления скрытого поля даты рождения:

    $('#birthday,#birthmonth,#birthyear').change(function() {
    var inputbirthday = $('#birthday').val();
    var inputbirthmonth = $('#birthmonth').val();
    var inputbirthyear = $('#birthyear').val();

    if (inputbirthday && inputbirthmonth && inputbirthyear) {
        alert('all values');
        $('#birthdate').val($('#birthday').val()+'/'+ $('#birthmonth').val()+'/'+ $('#birthyear').val());
    }
    if (inputbirthday == "" || inputbirthmonth == "" || inputbirthyear == ""){
        $('#birthdate').val('');
    }
});

И код параметра успеха jQuery.validate (который работает:

success: function() {
  if (elementholder.hasClass('ignore') == false) {
  errorspotholder.find('.rederrorx').removeClass('rederrorx').addClass('norederrorx');
                    }
                },

person Kyle    schedule 20.07.2010    source источник


Ответы (2)


Мой вариант использования немного отличается тем, что я не использую собственный обработчик для успеха. Однако у меня возникла проблема, из-за которой ошибка не исчезала после изменения скрытого поля. Я имею в виду, что я использую функции ошибок и успехов по умолчанию, но не должно быть никакой разницы - ваш обработчик все равно должен запускаться.

Кажется, самый простой способ справиться с этим — вызвать метод .form(). Итак, в событии, которое заполняет (или очищает) скрытый ввод, у меня просто есть это:

input.parents('form').validate().form();

input является элементом $() из события, затем я перемещаюсь вверх, чтобы получить форму (к которой был прикреплен валидатор), затем валидатор, затем вызываю .form(). Это повторно проверяет форму, очищает/добавляет ошибки, где это применимо, но не отправляет.

Надеюсь, это поможет, Джеймс.

person James S    schedule 27.04.2011

Хорошо... на этот вопрос нет ответа...

Но я почти уверен, что это отсутствующая функция jQuery.validate (изменения в скрытых полях не запускают события успеха и errorPlacement). Я обошел это, реплицировав код под успехом и errorPlacement внутри событий изменения jQuery, например так:

$('#chboxterms').change(function() {
   if ($('#chboxterms').is(':checked')) {
       //replicate jQuery.validate "success" code here
   } else {
       //replicate jQuery.validate "errorPlacement" code here
   }
}

Если вы используете динамические события и сообщения об ошибках, что вы, вероятно, и делаете... вам придется заменить этот код статической альтернативой, которая относится к $('selector'), для которого вы кодируете.

Надеюсь, это поможет кому-то!

person Kyle    schedule 21.07.2010