jquery复制dom对象,不复制事件的问题

6 篇文章 0 订阅
4 篇文章 0 订阅

复制dom对象的时候,只能复制内容,不能复制事件,点击任何一个地方,总是第一个dom执行动作。
看以下例子:

<script type="text/javascript">
$(function(){
    $("#add").on("click",function(){
        $("#group").append($(".person:last").clone(true));
    });
    $("#del").on("click",function(){
        if($(".person").length >1){
            $(".person:last").remove();
        }
    });
});
</script>
<body>
    <div class="group" id="group">
        <div class="person" id="person_0">
            姓名:<input class="easyui-textbox" name="name" />
            性别:<input class="easyui-combobox" name="sex" data-options="valueField:'id',textField:'text',data:[
            {id:'',text:'选择'},
            {id:'0',text:'女'},
            {id:'1',text:'男'}
            ]" />
        </div>
    </div>
    <button id="add">添加</button>
    <button id="del">删除</button>
</body>

可以比较正确的添加和删除内容。
这里写图片描述
这里写图片描述
可是,添加之后,点击任何一个下拉框,总是自动选择第一个。原因是:
clone的时候,不仅是把dom对象克隆了,还把第一个dom对象的事件也克隆了,所以造成了这样一个结果。
解决办法:

<script type="text/javascript">
$(function(){
    var tmp_html = $(".person").html();//必须在渲染前写,不然会出现两个下拉框
    $(".person select").combobox({panelHeight:"auto"});//渲染第一个下拉框
    $("#add").on("click",function(){
        // $("#group").append($(".person:last").clone(true));
        $("#group").append('<div class="person">'+tmp_html+'</div>');
        $(".person:last").find("select").combobox({panelHeight:"auto"});//渲染新添加的下拉框
    });
    $("#del").on("click",function(){
        if($(".person").length >1){
            $(".person:last").remove();
        }
    });
});
</script>
<body>
    <div class="group" id="group">
        <div class="person">
            姓名:<input class="easyui-textbox" name="name[]" />
            性别:<select name="sex[]" data-options="valueField:'id',textField:'text',width:'100',data:[
            {id:'',text:'选择'},
            {id:'0',text:'女'},
            {id:'1',text:'男'}
            ]"></select>
        </div>
    </div>
    <button id="add">添加</button>
    <button id="del">删除</button>
</body>

复制dom对象的html代码后,用combobox渲染一下,就可以正常使用了。

这里说一下,为什么要把input改成select,为什么还要把class=”easyui-combobox”去掉。
是因为在渲染第一个对象的时候,会同时把姓名框也渲染,为了和input区别开,所以改成select。easyui插件存在这样一个bug,就是clone的时候会把事件也克隆,不能自动渲染克隆后的元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值