Как заставить jQuery валидировать функцию успеха для работы со скрытым полем ввода? - PullRequest
0 голосов
/ 20 июля 2010

У меня есть форма, проверяемая 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');
                    }
                },

Ответы [ 2 ]

1 голос
/ 27 апреля 2011

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

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

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

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

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

0 голосов
/ 21 июля 2010

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...