2015-10-20 54 views
0

處理與可加載/卸載ajax內容有關的事件的正確方法是什麼?ajax無法加載內容的DOM事件?

我在HTML中有一個邊欄,它被隱藏並在點擊時顯示。通過ajax可以加載兩個頁面。

當側欄被隱藏/顯示時,我需要在ajax加載的頁面之一中調用resize方法。其他頁面沒有這種需要。

$('body').on('click', '.show-sidebar', function (e) { 
     //.. invoke some page1 resize methods here, only if page1 is present 
    }); 

的問題是:反正是有,我可以有上述處理程序只住了第1頁的持續時間和消失(未定義/無效),一旦網頁被卸載?或者更好,而不是在'body'上定義事件處理程序,有沒有辦法在page1 dom元素上定義處理程序(以便他們可以在任何地方聆聽任意 .side-bar點擊事件)? ?

+1

你可以命名空間你的事件,例如'.on('click.page1',fn)'。然後當你想刪除任何與'page1'相關的事件處理程序時,你只需調用'.off('。page1');'。有關更多詳細信息,請參閱「Events and namespaces」部分:https://api.jquery.com/on/ https://api.jquery.com/off –

回答

1

如果我正確理解你的問題,羅裏是正確的在這一個。您可以使用條件來檢測每個頁面上的對象的.length,然後委派您的事件。

$('body').on('click', '.show-sidebar', function (e) { 
    if($('#page1').length > -1){ 
     $('body').on('resize', '#your-selector', function(){ 
      // Do your thing 
     }); 
    } else { 
     $('body').off('resize', '#your-selector'); 
    } 
}); 

希望這有助於!如果我沒有正確理解這個問題,請告訴我。