我正在使用clone(true,true)复制select和一些按钮进行克隆和删除。 我认为第二个真正的参数应该确保将事件处理程序传递给克隆的子按钮。
这是标记:
<div id="clone-container">
<div class="clone">
<label for="select1">Select 1</label>
<select id="select1" name="select1" class="">
<option>Select One:</option>
<option value="1">1</option>
</select>
<span class="controls">
<a href="#" class="btn add">+</a>
<a href="#" class="btn remove">−</a>
</span>
</div>
</div>
和js:
var $cloned = $('.clone').clone(true, true);
var $addButton = $(".btn.add");
$addButton.on("click", function(e) {
e.preventDefault();
var $cloner = $(this).closest(".clone");
$cloned.clone().insertAfter($cloner);
});
这是一个小提琴: http://jsfiddle.net/cjmemay/yXA4R/
答案 0 :(得分:1)
以下是一个工作示例:http://jsfiddle.net/aT5mV/1/
我修改了on
事件以捕获.btn.add
上的所有点击次数,包含所创建的动态元素。
var $cloned = $('.clone').clone();
$('#clone-container').on("click", '.btn.add', function(e) {
e.preventDefault();
var $cloner = $(this).closest(".clone");
$cloned.clone().insertAfter($cloner);
});
答案 1 :(得分:1)
您的代码存在两个问题:
$cloned
)没有绑定到按钮的事件侦听器clone
的第二次调用不会保留事件在将事件监听器附加到按钮后,您需要克隆容器。此外,您需要将true
参数传递给clone
的第二次调用:
var $addButton = $(".btn.add");
$addButton.on("click", function(e) {
e.preventDefault();
var $cloner = $(this).closest(".clone");
$cloned.clone(true, true).insertAfter($cloner);
});
var $cloned = $('.clone').clone(true, true);
答案 2 :(得分:1)
您可以使用jQuery.detach()代替.clone(true,true);
这将是包含事件和所有内容的复制元素
答案 3 :(得分:0)
尝试使用.clone(true,true)
第二次克隆