jQuery проверяет динамически добавленные данные - PullRequest
0 голосов
/ 05 мая 2011

Я использую jQuery validate для проверки набора форм на сайте, над которым я работаю.

На этом сайте я клонирую некоторые входные данные в зависимости от выбора опции select.Я хочу проверить эти входные данные, но когда я это сделаю, будет проверен только первый.

Я попытался поместить $('form').validate(); в сценарий клонирования, где размещается (и работает) куча других сценариев,но он все еще проверяет только первое.

Что мне делать?

Ниже приведен мой скрипт-клон, где я считаю, что новый validate() должен быть помещен.Или что?

// Clone per number chosen
for (var i = 0; i < childrenCount; i++) {
    birthday
        .clone()
        .attr('name', birthday.attr('name') + count++ - 9)
        .appendTo('.childInputs')
        .children("input.childDD").attr('id', 'child' + count + 'DD')
        .next("input.childMM").attr('id', 'child' + count + 'MM')
        .next("input.childYYYY").attr('id', 'child' + count + 'YYYY')
        .parent().children('.noChild').html(count);

    $(this).parent().next(".linkedToPrev").slideDown('slow');
    $("input.yyyy").mask("9999",{placeholder:" "});
}

Я не буду публиковать весь код, потому что он довольно сложный.Если вы не знаете, что может стать причиной проблемы, я пойму.

1 Ответ

1 голос
/ 05 мая 2011

Если вы динамически добавляете элементы и используете обычные методы привязки событий с jQuery, новые элементы не привязываются автоматически, если только вы не используете обработчик $.live():

$('form').live('submit', function() {
   var $inputs = $('input', this); //this selects all inputs within the form
   //do validation
});

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

Надеюсь, это то, что вы искали.

РЕДАКТИРОВАТЬ: Поскольку кто-то возродил этот 4-летний пост, упоминание .live() устарело, вот современный способ jQuery даже делегировать документ:

$(document).on('submit', 'form', function () {
    //...
});
...