2013-05-27 38 views
0

克隆一個元素並將其附加到另一個元素時,最好是將事件從原始元素中刪除,還是使用on(),這樣就不需要克隆事件了?更好的基礎是速度更快,使用更少的內存,並且是更正式的方式。請解釋爲什麼一種方式比另一種更好。謝謝克隆(true)應該在追加克隆的元素時使用,還是使用克隆(false)時使用()?

選項1,事件不被複制

$('#add').click(function(){$("#list").append($("#clone").clone(false));}; 
$("#list").on("click", "a", function(){alert('hello');}); 

選項2,事件被克隆

$('#add').click(function(){$("#list").append($("#clone").clone(true));}; 
$("#clone a").click(function(){alert('hello');}); 

HTML常見的兩種選項

<a href="javascript:void(0)" id="add">Click</a> 
<li id="clone"><a href="javascript:void(0)">Click</a></li> 
<ul id="list"></ul> 
+0

適當級別的活動代表團運作良好。 jQuery使用它的原因是'在'棄用'live'並通過'click()'推薦它 – sabithpocker

+1

@sabithpocker:什麼? '.on()'的非事件委託語法等同於'.click()'。 – Blender

+1

如果您使用的是jQuery,那麼您可能並不是真的關心性能和內存開銷。 – 2013-05-27 18:15:58

回答

0

您應該使用事件代表團(on選項);主要好處是您不必在追加後附加另一個事件處理程序;事先定義事件處理。

主要的好處是你沒有爲每個對象附加一個新的函數,這意味着內存消耗更少;相反,事件會冒泡到相同的事件處理功能:

$("#list").on("click", "a", function(){alert('hello');}); 

// Don't run this after appending; you're already done setting up event handling. 
+0

clone(true)是否創建另一個事件? – user1032531

0

事件委託會慢一點,但吃的內存要少得多。它被認爲是更清潔的方法。