2012-03-07 124 views
2

我有一些用ajax加載的選項卡。我通過HTML獲取內容並將其插入到頁面中。棘手的部分是當我使用ajax加載新內容時,我需要監聽新內容的其他事件,並對新內容執行其他任務。 這是我的目標:將綁定事件加載到jQuery加載的內容

var Course = { 

    config: { 
     page: 'description' 
    } 

    init: function() { 
     $('a.show-details').on('click', this.loadCourse); 
    }, 

    loadCourse: function() { 
     var courseId = $(this).parent().data('course_id'), 
      item_content = $(this).parents('div.item').children(), 
      path = 'main/ajaxjson/load_course_details'; 

     if ($(this).parents('h1.more').hasClass('current')) { 
      $(this).parents('h1.more').removeClass('current'); 
     } else { 
      $(this).parents('h1.more').addClass('current'); 
     } 
     $(item_content[2]).slideToggle(); 
     Course.doAjax(courseId, path); 
    }, 


    doAjax: function(courseId, path) { 
     $.ajax({ 
      type: 'POST', 
      url: ROOT_PATH + path, 
      data: {page : Course.config.page, course_id: courseId}, 
      success: function(result){ 
       $('#ajax-content-' + courseId).hide(); 
       $('#ajax-content-' + courseId).empty().append(result); 
       $('#ajax-content-' + courseId).show(); 

       // bind events here? call other methods like Couse.methodName()? 
      } 
     }); 
    } 
}` 

我不提供標記,所以讓我解釋的邏輯。我初始化課程對象,當我點擊它時我有一個鏈接,我發起了一個Ajax請求來獲取課程和slideToggle課程內容。現在我返回加載的HTML內容。在html中,我將有按鈕和其他項目。我做了一個新的方法bindEvents並綁定那裏的事件?我需要重新綁定每個Ajax調用嗎?

+0

這是一個重複:http://stackoverflow.com/q/16598213/386579 – 2015-03-23 12:53:27

+0

檢查了這一點:http://stackoverflow.com/questions/13791740/jquery-lazyloa d-with-ajax/31234389#31234389 – antoniputra 2015-07-05 19:59:48

回答

3

您需要將事件偵聽器添加到DOM樹中未添加的動態元素。您可以使用jQuery的live()將其添加到body中,但最好使用delegate

因此,如果.show-details鏈接位於#main元素內部,例如,它不會被AJAX請求您將綁定的事件,像這樣:

$('#main').delegate('.show-details', 'click', this.loadCourse); 

編輯:如果您在使用jQuery 1.7+你應該使用:

$('#main').on('click', '.show-details', this.loadCourse); 
+0

委託只是事件 – Mythriel 2012-03-07 15:07:16

+0

的參考在jQuery 1.7+ yeh中。我一定誤解了你的問題。你描述它的方式,我以爲你想要將事件綁定到DOM中可能不存在的元素,但會在稍後添加。請讓它更清楚你以後的樣子。 – Tjkoopa 2012-03-07 15:31:54

+0

我想將事件綁定到不在DOM中的元素,並在AJAX請求後加載 – Mythriel 2012-03-07 16:23:06