2011-05-13 95 views
2

頁面加載後創建的標籤我有小的應用程序: http://jsfiddle.net/Bwdf6/4/刪除與jQuery

但隨着點擊刪除,即後頁面加載犯規刪除創建的標籤。 有什麼辦法來刪除頁面加載後創建的標籤?

在此先感謝

+0

hummm ......你不必在刪除任何行動......你想幹什麼?使用jQuery刪除添加的元素,或重新加載頁面? – 2011-05-13 11:42:02

+1

我認爲每個人都應該停下來回答'.live()'這些類型的問題。這不是最佳做法,應該在最有可能的情況下使用'.delegate()'。我們應該在這裏建議最佳實踐,而不是狩獵代表。 – kapa 2011-05-13 11:47:01

+0

參見@ Mark的解答比使用live()更有效。 – Town 2011-05-13 12:00:36

回答

4

使用live() - Working Demo

$('.sp').live("click", function() { 
     $(this).parent().remove(); 
    }); 

當你動態地創建元素,使用click()是不夠的 - 只分配一個單擊處理程序存在的時候click()被稱爲所有.sp元素。

live(),在另一方面,用於:

附加一個處理程序事件當前 選擇器現在和將來匹配其中,所有 元素。

因此,任何動態添加的新元素與sp類都會將該處理程序附加到它們。

編輯:其實,一對夫婦的人指出,雖然live()會做你需要什麼,在這種情況下使用最有效的功能將是delegate(),這是用來:

附加一個處理程序,以一個或多個事件 爲一組特定的根元素的基礎 的 選擇現在或將來匹配,所有的元素。

我不會通過發佈代碼示例來竊取榮耀 - 請參閱@ Mark的答案,應該接受而不是我的。

+0

+1編輯(和體育道德)。 – kapa 2011-05-13 12:06:28

1

這就是爲什麼live()的 '發明'。

變化:

$('.sp').click (function() { 

有:

$('.sp').live('click', function() { 
2

您可以使用.live().delegate()

.delegate()將是最好的選擇,因爲所有的項目都有一個共同的母公司。

$('#theList').delegate(".sp", "click", function() { 
    $(this).parent().remove(); 
}); 

Updated fiddle

+0

+1終於有人建議'.delegate()':) – kapa 2011-05-13 11:48:54

+0

+1 Mark,我不知道委託在這種情況下會更有效率。 – Town 2011-05-13 11:50:29