我有这个列表,它在我的页面上显示了九个帖子。每个帖子都有一个与之相关的“喜欢”功能,因此用户可以喜欢每个帖子,并查看喜欢的数量更新。这是通过一个简单的 ajax 调用来实现的。
用户还可以通过按下按钮加载更多帖子,以便通过 ajax 附加九个帖子。这工作正常,但我的问题是与通过加载更多功能加载的帖子相关联的类似功能。
此函数有一个参数,即最后插入的帖子的 id (iden)。它获取 ul 中的所有 li 并创建一个名为 $listItems 的列表。然后它遍历 $listItems,检查帖子的 id 是否小于最后插入的,然后将点击事件与帖子的“like”符号联系起来。每次按下“加载更多”按钮时都会调用该函数。
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);
}
});
});
}
});
}
这个函数有两个问题。
当我第一次按下加载更多按钮时,我可以喜欢九个新附加帖子中的前八个,但点击事件与第九个和最后一个无关。如果我执行 console.log(id) 我可以看到最后一个的 id 没有打印,尽管它在列表 $listItems 中,但我已经检查过了。
当我第二次按下加载更多按钮时,所有帖子,而不仅仅是 ID 低于上次插入的帖子,都会获得一个与它们相关的点击事件,这会在单击按钮时创建双重发布。我不明白为什么第二次调用该函数时 if 条件不起作用。