Как сохранить (или повторно применить) привязки jQuery к новым элементам после использования jQuery "clone()"?

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

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

Лучший

РЕДАКТИРОВАТЬ 1 (JQuery):

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

$(Функция (){
    $('.date_pick').datepicker({"numberOfMonths": 2});
    $("# Add_line_item"). Bind ('щелчок', функция (событие){
        event.preventDefault();
        addLineItem();
        $('Date_pick ') DatePicker (' уничтожить').
        $('Date_pick') DatePicker ().
    })
})

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

2 ответа

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

Во-первых, как написано, ваш метод 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'));
    });
});

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

Другие вопросы по тегам