使用jQuery克隆不能正确增加

时间:2015-09-15 20:35:01

标签: javascript jquery html

使用jQuery处理克隆。使用我当前的代码如果用户单击addmore按钮克隆工作正常,ID和名称。生成id是错误的,它是初始id被克隆,重复id cloned1,cloned12,cloned123。但我想要Cloned,Cloned1,Cloned2,Cloned3等。,而我的第二个问题是,如果我点击addmore按钮克隆一个没有下来它就是顶部(安排克隆问题)

请帮助我解决任何问题

这是jquery代码

    //dynamic row for Attachment Table
$(document).on("click", ".attch_add_button", function () {
        var i=$('.cloned-row4').length; 
        $(".cloned-row4:last").clone().insertAfter(".cloned-row4:last").attr({               
        'id': function(_, id) { return id + i },
        'name': function(_, name) { return name + i }
        }).end().find('[id]').val('').attr({ 'id': function(_, id) { return id + i }               

    }); 
        if(i < $('.cloned-row4').length){
            $(this).closest(".attch_add_button").removeClass('btn_more attch_add_button').addClass('btn_less');
        }
    i++; 
    return false;           
});
$(document).on('click', ".btn_less", function (){
    var len = $('.cloned-row4').length;
    if(len>1){
        $(this).closest(".btn_less").parent().parent().parent().remove();
    }
});

这是小提琴link

请帮助我

提前致谢

3 个答案:

答案 0 :(得分:1)

在添加新号码之前,您应该从末尾删除号码。像这样:

        'id': function (_, id) {
            return id.replace(/\d+$/, '') + i
        },
            'name': function (_, name) {
            return name.replace(/\d+$/, '') + i
        }

您还需要确保如果有人删除了克隆...您不会复制ID(如果有10个克隆,则会有一个ID为9的克隆...如果有人删除了一个并创建一个新的,将有另一个ID为9.)这可以通过首先获得最高ID来修复...像这样

    var i = 0;
    $('.cloned-row4').each( function() {
        var match = this.id.match(/\d+$/);
        var num = match ? Number.parseInt(match[0]) : 0;
        if(i < num+1) {
            i = num+1;   
        }
    });

答案 1 :(得分:0)

为什么要获取clonedx值,进行操作然后将其更改为其他值?如果你知道模式将是&#34; ClonedX&#34;你不能直接使用它吗?那么最简单的方法就是

    'id': "cloned" + i,
    'name': "cloned" + i

答案 2 :(得分:0)

您只需在用户点击时调用一个功能添加更多按钮。

  function setCustomAttr(){ 
        $('.cloned-row4').each(function(i,v){ 
            $(this).attr('id','cloned'+i); 
            $(this).attr('name','cloned'+i);
        }); 
    }