像函数一样的Jquery无法正常工作

时间:2013-08-02 11:22:45

标签: javascript jquery ajax

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

此功能有两个问题。

  1. 当我第一次按下加载更多按钮时,我可以喜欢九个新添加的帖子中的前八个,但是click事件不依赖于第九个和最后一个。如果我执行console.log(id),我可以看到最后一个的id没有打印,虽然它位于列表$ listItems中,我已经检查过了。

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

1 个答案:

答案 0 :(得分:1)

.live()在1.7+中已弃用,在1.9中已删除,请考虑使用此类.on()

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

 $(document).on("click",".likemore" + i, function (e) {