2012-05-13 42 views
0

我記得有一次之前有這個問題,但我不知道它是哪個項目或我如何修復它。我的ajax/jquery函數不適用於在分頁內容中動態加載

我有一個ajax'添加到最愛'按鈕,我也有無限的滾動,當你到達頁面底部時,ajax加載頁面。問題是AJAX犯規適用於新追加的內容

// Favorites 
    $('.res-list .star').click(function(){ 
    var starLink = $(this); 
    var listItem = $(this).parent().parent(); 

    if ($(starLink).hasClass('starred')) { 
     $(starLink).removeClass('starred'); 
    } else { 
     $(starLink).addClass('starred'); 
    } 
    $.ajax({ 
     url: '/favorites/?id=' + $(starLink).attr('data-id'), 
     type: 'PUT', 
     success: function() { 

     if ($(starLink).hasClass('starred')) { 
      $(listItem).animate({ 
      backgroundColor: '#FFF8E4' 
      }, 400); 
     } else { 
      $(listItem).animate({ 
      backgroundColor: '#ffffff' 
      }, 400); 
     } 
     } 
    }); 
    return false; 
    }); 

回答

4

您需要現場活動

$('.res-list').on('click', '.star', function() { 

    // code here 
}); 

或使用委託()

$('.res-list').delegate('.star', 'click', function() { 

     // code here 
    }); 

read about delegate()

read about on()

+0

使用其中一種還是有益的?謝謝btw! – Tallboy

+0

@Tallboy你可以使用任何人 –

+0

注意第二個類似於第一個,除了它將處理程序綁定到指定的元素而不是文檔根。 –

0

.bind()方法將把事件處理程序附加到所有匹配的錨上!這是不好的。不僅隱式地遍歷所有這些項目以附加事件處理程序是很昂貴的,而且它也是浪費的,因爲它是一次又一次的相同的事件處理程序。

.delegate()方法的行爲方式與.live()方法類似,但不是將選擇器/事件信息附加到文檔,您可以選擇錨定的位置。就像.live()方法一樣,這種技術使用事件委託來正確工作。

+0

感謝您的澄清:) – Tallboy