0

我有这个列表,它在我的页面上显示了九个帖子。每个帖子都有一个与之相关的“喜欢”功能,因此用户可以喜欢每个帖子,并查看喜欢的数量更新。这是通过一个简单的 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);                              
             }
    }); 
    }); 
    }
    });
 }      

这个函数有两个问题。

  1. 当我第一次按下加载更多按钮时,我可以喜欢九个新附加帖子中的前八个,但点击事件与第九个和最后一个无关。如果我执行 console.log(id) 我可以看到最后一个的 id 没有打印,尽管它在列表 $listItems 中,但我已经检查过了。

  2. 当我第二次按下加载更多按钮时,所有帖子,而不仅仅是 ID 低于上次插入的帖子,都会获得一个与它们相关的点击事件,这会在单击按钮时创建双重发布。我不明白为什么第二次调用该函数时 if 条件不起作用。

4

1 回答 1

1

.live()在 1.7+ 中已弃用并在 1.9 中删除,请考虑.on()像这样使用。

委托最近的静态父级或文档以动态添加元素

 $(document).on("click",".likemore" + i, function (e) {
于 2013-08-02T11:27:01.610 回答