2012-02-17 138 views
1

我有一个HTML图像元素,如下所示:克隆HTML元素与活动

var actionImage = $("<img></img>"); 
    actionImage.attr("id", getRandomString()); 
    actionImage.attr("width", "16").attr("height", "16").attr("src", "Action_normal.png"); 
    actionImage.attr("style", "cursor: hand;"); 
    actionImage.bind('mouseover', function() { 
     OnMouseOver($(this).get(0));    
    }); 

当我克隆该元件I松开鼠标悬停事件。我怎样才能确保这些事件也被克隆。

+1

'$(this).get(0)'是错误的。这与完成“this”完全相同。尝试:'alert($(this).get(0)=== this); // true' – 2012-02-17 23:23:39

+1

您也可以考虑通过传递一个对象来设置属性,从而将5'.attr()'调用减少为只有一个。 'actionImage.attr({id:getRandomString(),width:16,height:16 ...})' – 2012-02-17 23:27:57

回答

3

Clone接受一个布尔参数,当它为true(这不是默认值)时,保存数据和事件。你想要$actionImage.clone(true)

而@Purmou提到,你也可以通过绑定你的JS事件通过ondelegate来做到这一点,以避免这个问题。

+0

不错 - 不知道。你的答案肯定比我的好。 – 2012-02-17 23:18:38

1

在将true传递给JQuery中的clone()方法时,也会复制事件处理程序。所以只需使用$("#myElementId").clone(true)

1

.clone具有[withDataAndEvents]选项,可以设置为true

withDataAndEvents

一个布尔指示是否事件处理程序应 与元件一起被复制。从jQuery 1.4开始,元素数据将会被复制,以及 。

来源:http://api.jquery.com/clone/

这一直以来1.0的选项。