2012-02-17 65 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的選項。