Как сохранить (или повторно применить) привязки jQuery к новым элементам после использования jQuery "clone ()"? - PullRequest
2 голосов
/ 21 декабря 2011

У меня есть форма, с помощью которой я использую jQuery ".clone ()" для добавления новых строк.Все выглядит великолепно, однако у меня есть проблема с обязательностью.По сути, при инициализации я использую функцию jQuery ".datepicker ()" для одного поля (в зависимости от класса).Если я использую ".clone ()" сам по себе, я не получаю никакой функциональности ".datepicker ()" с новым элементом.Если я использую «.clone (true)», я получаю функциональность, но для клонированных строк он заполняет дату строки, из которой он был клонирован, а не фактическую нажатую строку.

Я попытался отменить привязку / повторное связывание, но ничего из этого не работает.Итак, как мне добавить новые строки в форму, при этом все функции JQuery работают правильно?

Best

EDIT 1 (jQuery):

function addLineItem(){
    $('#charges_table tr:last').clone(true).insertAfter('#charges_table tr:last');
}

$(function(){
    $('.date_pick').datepicker({"numberOfMonths": 2});
    $("#add_line_item").bind('click',function(event){
        event.preventDefault();
        addLineItem();
        $('.date_pick').datepicker('destroy');
        $('.date_pick').datepicker();
    })
})

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

Ответы [ 2 ]

0 голосов
/ 21 декабря 2011

Во-первых, как написано, ваш метод addLineItem всегда будет клонировать, какой бы ни была последняя строка таблицы: $('#charges_table tr:last'). Похоже, вы хотите клонировать строку таблицы, в которой произошел щелчок. Если это так, то что-то вроде этого должно сработать:

function addLineItem(row){
    $(row).clone(true).insertAfter('#charges_table tr:last');
}

$(function(){
    $('.date_pick').datepicker({"numberOfMonths": 2});
    $("#add_line_item").bind('click',function(event){
        event.preventDefault();
        // Pass the closest 'tr' element to the element clicked.
        addLineItem($(this).closest('tr'));
    });
});

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

0 голосов
/ 21 декабря 2011

Когда вы .clone(), меняете ли вы ID элемента перед тем, как вставить его обратно в DOM? В противном случае ваше удостоверение личности будет продублировано, и это может стать причиной вашей проблемы.

...