2011-01-11 37 views
0

您可以使用事件和数据克隆元素,但事件仍然适用于原始对象而不是新对象。你如何克隆事件和数据克隆,但适用于最新的克隆?

我已经使用的jsfiddle证明问题:http://jsfiddle.net/VZZG4/

重现: 1.点击克隆按钮 2.在新的文本输入,类型为“新建” 3.打新克隆按钮 实际结果:最新的克隆说“测试” 预期结果:最新的克隆说“新”

问题:如何克隆事件和数据克隆,但适用于最新的克隆?

回答

2

用最接近()克隆预期的元素...

$(document).ready(function() { 
    $('#clone').click(function() { 
     $(this).closest('#container').clone(true).appendTo('#wrap'); 
    }); 
}); 

updated fiddle

,我建议你使用class代替id的。重复id是无效的HTML。

+0

使用最接近()似乎是答案。不好意思,我匆匆把那个测试用例放在一起。无论如何,这一切都很好,直到你尝试将它应用到trovster的重复/删除jquery插件...(http://www.trovster.com/lab/plugins/duplicate-remove/) – HM2K 2011-01-11 12:31:03

2

您犯了一个错误,即使用ID克隆对象。在大多数浏览器中,如果您有多个具有相同ID的元素,则会返回第一个元素。因此$('#container')将始终返回值为Test的第一个值。

给出应该克隆类的元素。

HTML:

<div id="wrap"> 
    <div class="container"> 
     <input type="text" class="edit" value="Test"> 
     <input type="button" class="clone" value="Clone"> 
    </div> 
</div> 

的JavaScript:

$(document).ready(function() { 
    $('.clone').click(function() { 
     $(this).closest('.container').clone(true).appendTo('#wrap'); 
    }); 
}); 

检查你的代码http://jsfiddle.net/VZZG4/2/

参考修改后的版本:closest