为什么这个“复制”(点击)错误,它也绑定了所有以前的处理程序:
var add = function(element) {
var ele = element.clone(true);
$('.container').append(ele);
$('.copy', new).click(function(){ add(ele); });
}
想法:我希望在“复制”按钮旁边有一个元素文本。 当我单击“复制”时,它会克隆当前行并将其附加到容器中。 但这似乎是递归的......
答案 0 :(得分:2)
通常,绑定到原始元素的任何事件处理程序都不会复制到克隆。可选的
withDataAndEvents
参数允许我们更改此行为,并改为将所有事件处理程序的副本绑定到元素的新副本。
因此,您不断向click
元素添加.clone
个事件处理程序。根据您的实际情况,不要再次绑定事件处理程序:
var add = function(element) {
var cloned = element.clone(true);
$('.container').append(cloned);
}
$('.container .copy').click(function(){
add($(this).closest('tr'));
});
(我使用$(this).closest('tr')
获取父行。显然,您必须根据需要进行调整。)
<强>更新强>
或者不通过true
:
var add = function(element) {
var cloned = element.clone();
$('.container').append(cloned);
$('.copy', cloned).click(function(){ add(cloned); });
}
答案 1 :(得分:0)
new
是JS关键字。将其更改为其他内容并且应该可以正常工作。
(你的代码除了自身之外没有add()的调用。所以目前还不清楚代码是如何在那里得到的。并且代码中的函数的递归声明是程序员地狱的路径)