我有这个列表,在我的页面上显示九个帖子。每个帖子都有一个“喜欢”功能绑定它,以便用户可以喜欢每个帖子,并看到喜欢更新的数量。这是通过简单的ajax调用实现的。
用户还可以通过按下按钮加载更多帖子,以便通过ajax追加9个帖子。这工作正常,但我的问题是like-function与通过load more-function加载的帖子相关联。
此函数有一个参数,即最后插入的帖子(iden)的id。它需要ul中的所有li并创建一个名为$ listItems的列表。然后迭代$ listItems,检查帖子的id是否小于最后插入的id,然后将click事件绑定到帖子的“like”-symbol。每次按“加载更多”按钮时都会调用该函数。
function likenmore(iden) {
var $listItems = $('ul.statuses').find('li');
var i = 0;
console.log($listItems);
$.each($listItems, function (index, element) {
var id = $(this).attr('class');
if (id < iden)
{
console.log(id);
i++;
$(".likemore" + i).live("click", function(e){
e.preventDefault();
$.ajax({
type: 'POST',
url: 'like.php',
data: "id=" +id + "&num=1",
success: function(data) {
$('.hearts' + id).html(data);
}
});
});
}
});
}
此功能有两个问题。
当我第一次按下加载更多按钮时,我可以喜欢九个新添加的帖子中的前八个,但是click事件不依赖于第九个和最后一个。如果我执行console.log(id),我可以看到最后一个的id没有打印,虽然它位于列表$ listItems中,我已经检查过了。
当我第二次按下加载更多按钮时,所有帖子,不仅仅是id低于上次插入的帖子,都会发生一个与之关联的点击事件,这会在按钮时创建双重发布点击。我不明白为什么if条件在第二次调用函数时不起作用。
答案 0 :(得分:1)
.live()
在1.7+中已弃用,在1.9中已删除,请考虑使用此类.on()
。
为最近的静态父级或文档委派动态添加元素
$(document).on("click",".likemore" + i, function (e) {