2014-04-04 47 views
1

TL/DR:有什麼辦法可以防止jQuery在元素從DOM中移除時自動解除綁定事件?防止jQuery在元素移除時解除綁定事件

當您在jQuery元素上調用remove()時,jQuery會自動解除綁定該元素的所有事件。例如,假設我有以下內容:

var button = $("<button>Click me</button>"); 
$("body").append(button); 

button.click(function() { 
    console.log("clicked"); 
}); 

button.remove(); 
$("body").append(button); 

如果我單擊按鈕,則不會向控制檯輸出任何內容。解決這個問題的一種方法是將事件元素的父綁定是這樣的:

$("body").on("click", "button", function() { 
    console.log("clicked"); 
}); 

我試圖建立一個可重用的控制,它包裝一個jQuery元素,並增加了新的行爲給它。將事件綁定到父元素的解決方案對我來說不起作用,因爲我無法確定元素在DOM中的附加位置以及它是否會被刪除。出於性能方面的原因,我不想將事件綁定到文檔(可能會有很多)。有什麼辦法來防止jQuery的默認移除行爲?

回答

5

不要使用.remove()使用.detach()

button.detach(); 

演示:Fiddle

.detach()

的.detach()方法是一樣的一個.remove(),所不同的是。 detach() 保留所有與被刪除元素相關聯的jQuery數據。此方法在稍後將已移除的元素重新插入到 DOM中時非常有用。

.remove()

類似於.empty()時,卸下襬臂()方法接受元件出 DOM的。使用.remove()當你想刪除元素本身,以及 作爲裏面的一切。除了元素本身之外,綁定事件和與元素相關的jQuery數據的所有 都將被刪除。 要刪除元素而不刪除數據和事件,請改爲使用.detach()

+0

哇,你在不到一分鐘的時間內回答了我的問題。我不確定我是如何錯過'remove'文檔中的'detach'。無論如何,感謝您的幫助! – LandonSchropp

+0

@Arun - 如果我使用detach()方法如何重新記憶? –

+0

@sudhar你回憶什麼意思? –