2013-11-03 41 views
9

我創建了兩個元素dinamically用jQuery工作:圖片 和關閉按鈕jQuery的不文檔加載後創建的元素

我寫的代碼刪除這兩個在doument.ready功能:

$(".deletepreview").click(function() { 
    code = $(this).data("prevcode"); 
    $('#'+code).remove(); 
    $(this).remove(); 
}); 

但它不起作用,我認爲這是因爲代碼不會在文檔加載後創建的代碼中搜索。

我該如何解決這個問題?

+4

http://learn.jquery.com/events/event-delegation/ – Moob

+0

見其他類似的答案:不jQuery.on()對於那些後添加的元素工作事件處理程序是創建?](http://stackoverflow.com/questions/9814298/does-jquery-on-work-for-elements-that-are-added-after-the-event-handler-is-cre/ 9814409#9814409)和[jQuery .on()方法在加載動態html後添加點擊事件](http://stackoverflow.com/questions/8752321/jquery-live-vs-on-method-for-adding-a - 單擊事件-後裝動態-HT/8752376#8752376)。 – jfriend00

回答

28

你需要通過on()使用委託的事件,如果你想事件處理動態地添加的元素:

$(document).on("click", ".deletepreview",function() { 
    var code = $(this).data("prevcode"); 
    $('#'+code).remove(); 
    $(this).remove(); 
}); 

我稍微修改你的例子:總是與封閉var聲明變量,當您需要時除外。

+2

百萬美元的答案謝謝你的隊友你救了我的一天 –

8

對於動態創建的元素嘗試使用委託與on像:

的事件處理程序僅結合到當前選擇的元素;在代碼調用.on()時,頁面上必須存在 。 要確保元素存在並且可以選擇,請在頁面上的HTML標記中的 HTML標記中對元素執行文檔就緒處理程序內的事件 綁定。如果新頁面被注入頁面, 選擇元素並附加事件處理程序,當新的HTML被放置到頁面中時,頁面中的內容爲 。或者,使用委託事件來附加處理程序事件 ,如下所述。

委託事件的優點是它們可以處理來自 後來添加到文檔中的事件的事件。通過 採摘這是保證出席 委派的事件處理程序連接時的元素,你可以使用委派事件 避免需要頻繁安裝和取下事件處理程序。例如,這個 元素可能是模型 - 視圖 - 控制器設計中的視圖的容器元素,或者處理程序想要監視文檔中的所有冒泡事件的文檔。 文檔元素在 加載任何其他HTML之前在文檔的頭部中可用,因此在沒有 等待文檔準備就緒的情況下附加事件是安全的。

代碼:

$('body').on('click', '.deletepreview', function() { 
    var code = $(this).data('prevcode'); 
    $('#'+code).remove(); 
    $(this).remove(); 
}); 
相關問題