jQuery克隆递归

时间:2011-05-12 23:36:05

标签: javascript jquery clone

为什么这个“复制”(点击)错误,它也绑定了所有以前的处理程序:

var add = function(element) {
  var ele = element.clone(true);
  $('.container').append(ele);
  $('.copy', new).click(function(){ add(ele); });
}

想法:我希望在“复制”按钮旁边有一个元素文本。 当我单击“复制”时,它会克隆当前行并将其附加到容器中。 但这似乎是递归的......

2 个答案:

答案 0 :(得分:2)

The true parameter says:

  

通常,绑定到原始元素的任何事件处理程序都不会复制到克隆。可选的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()的调用。所以目前还不清楚代码是如何在那里得到的。并且代码中的函数的递归声明是程序员地狱的路径)