我正在构建一个类似Twitter的简单项目,但非常简单:)用户主页(时间轴)上有很多推文。所以每条推文都有收藏按钮。当用户点击收藏夹按钮时,它会向服务器发送AJAX请求以存储收藏的推文。所以最喜欢的按钮就是这样的东西:
<a href="#" id="1"><i class="icon-star-empty"></i></a>
<a href="#" id="2"><i class="icon-star"></i></a>
<a href="#" id="3"><i class="icon-star-empty"></i></a>
...
...
我使用以下JavaScript发送AJAX请求:
$("i").on("click", function() {
if ( $(this).hasClass("icon-star-empty") ){
ajaxURL = "/setFavorite"
} else{
ajaxURL = "/removeFavorite"
}
var linkID = $(this).parent().prop("id");
var obj = $(this);
$.ajax({
url: ajaxURL,
type: "POST",
data: {quoteID : linkID},
success: function() {
obj.hasClass("icon-star") ? obj.removeClass("icon-star").addClass("icon-star-empty") : obj.removeClass("icon-star-empty").addClass("icon-star");
}
});
})
由于有很多推文,我设置了Infinite Scroll Plugin。当我没有设置Infinite Scroll时,AJAX请求运行良好。但是当我设置时,那些AJAX请求对于通过Infinite Scroll加载的那些推文不起作用。我的意思是,当我点击通过Infinite Scroll加载的推文的收藏夹按钮时,他们不会向服务器发送AJAX请求。但AJAX请求使用通过默认HTML而不是无限滚动加载的推文。
所以我的问题是如何解决这个问题?如何发送通过Infinite Scroll加载的推文的AJAX请求?
提前致谢。
答案 0 :(得分:1)
$('selector').on('event', callback)
仅绑定处理选择器时存在的元素的事件。但是,无限滚动代码稍后会加载新元素,因此不会绑定任何事件。
解决方案是使用委托:
$('selector').on('click', 'i', function() {
// do stuff
});
selector
必须是包含所有(动态添加的)i
元素的父元素。