2

我有一个表单,我使用 jQuery ".clone()" 添加新行。一切看起来都很棒,但是我有一个绑定问题。基本上,在初始化时,我对一个字段(基于类)使用 jQuery“.datepicker()”函数。如果我单独使用“.clone()”,我不会获得新项目的任何“.datepicker()”功能。如果我使用“.clone(true)”,我会获得该功能,但对于克隆的行,它会填充它被克隆的行的日期,而不是实际点击的行。

我试过解除绑定/重新绑定,但这些都不起作用。那么,如何在让所有 jQuery 乐趣正常工作的同时将新行附加到表单?

最好的

编辑1(jQuery):

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

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

仅供参考,我只是在类上绑定,而 HTML 元素没有使用 ID 来说话。

4

2 回答 2

0

当您.clone()将元素重新插入 DOM 之前,您是否更改了元素的 ID?否则,您的 ID 将被复制,这可能是您的麻烦之源。

于 2011-12-21T17:25:58.860 回答
0

首先,正如所写,您的方法 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'));
    });
});

我没有测试过这段代码,但它是基于我的一个项目中的类似表行克隆代码。

于 2011-12-21T18:54:47.053 回答