2012-05-13 44 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