2011-05-12 65 views
1

这是为什么“复制”(点击)错了,它结合前面所有的处理程序,以及:jQuery的克隆递归

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

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

回答

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); }); 
} 
+2

是不是“新”的关键字? – robx 2011-05-12 23:42:08

+0

@robx:谢谢! – 2011-05-12 23:44:11

+0

我认为这应该是'活',而不是'点击',因为克隆的对象是新的dom? – 2011-05-12 23:48:57

0

new是JS关键字。把它改成别的东西,它应该可以工作。

(你的代码没有从自身的add()除的电话。所以它是不明确的代码如何到达那里开始,而且功能递归声明在你的代码是程序员地狱的路径)