2013-08-02 91 views
0

我有這個列表,其中顯示了我的網頁上的九個職位。每個帖子都有一個「喜歡」功能,以便用戶可以喜歡每個帖子,並查看喜歡的數量更新。這是通過簡單的ajax調用實現的。jquery like函數無法正常工作

用戶還可以通過按按鈕加載更多的帖子,以便通過ajax追加9個帖子。這工作正常,但我的問題是與通過負載更多功能加載的帖子綁定的類似功能。

該函數有一個參數,它是最後插入的帖子(標識符)的標識。它接受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. 當我推負載更多按鈕,在第一時間,我可以像九個新追加的帖子的第8名,但單擊事件不依賴於第九和最後一個。如果我做了console.log(id),我可以看到最後一個的id沒有打印,事件雖然在列表$ listItems中,我已經檢查過了。

  2. 當我第二次推入加載更多按鈕時,所有帖子,不僅僅是id低於最後一個插入的帖子,會獲得一個與它們相關的點擊事件,當按鈕是點擊。我不明白爲什麼if條件在第二次調用該函數時不起作用。

回答

1

.live()在1.7+棄用,在1.9去除考慮使用.on()這樣。

代表在最近的靜態父母或文檔動態添加元素

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

嘗試使用委託的事件處理程序。就像上面評論中的安東所說的那樣,它被棄用了。可能是它造成了問題。 –

+0

嗨,謝謝你的迴應。我改變了jQuery 1.10.2並用de代理事件處理程序替換了我的實時函數,但exet同樣的問題仍然存在。任何其他建議? – user1009453

+0

您是否收到任何錯誤,並且您是否按照我寫的方式完全一樣? – Anton