2012-08-24 163 views
3

我正在研究一個博客主題,您可以從主題頁面中找到帖子。它使用以下JavaScript來像tumblr API一樣發佈帖子,將白色心臟更改爲紅色的心臟,並且還在帖子數量+1上顯示,顯示在類似按鈕上方。它可以正常工作,但我遇到這樣的問題,即當您單擊心臟按鈕時,它會變成紅色,喜歡該帖子,並將+ 1添加到筆記計數中,但您可以在已經喜歡的位置繼續單擊該按鈕,並繼續添加一個到筆記數。任何人都可以幫助我做到這一點,所以這是一個只能工作一次的功能,例如:有人點擊心臟按鈕,它變成紅色,在筆記計數中加1,然後完成。Javascript只能使用一次功能

$(function() {  
     $('.likepost').live('click', function() { 
      var post = $(this).closest('article'); 
      var id = post.attr('id'); 
      var oauth = post.attr('rel').slice(-8); 
      var count = parseInt($("#note_count_"+ id).text()); 
      var like = 'http://www.tumblr.com/like/'+oauth+'?id='+id; 
      $('#like-it').attr('src', like); 
      $(this).css({"background" : "url(http://static.tumblr.com/uiqhh9x/JYdlzwvnx/like2.png)"}); 
      $("#note_count_"+ id).text(count+1); 
      return false; 
     }); 
    }); 

它的功能在http://blog.jamescharless.com/,順便說一下。您必須登錄到tumblr才能使腳本正常工作。

+3

http://api.jquery.com/one/ – j08691

+0

我認爲這裏的問題不是它可以多次運行,而是它不會與tumblr帳戶關聯。否則,用戶可以刷新頁面並再次喜歡它。 – Zhihao

+0

@canon - 閱讀http://api.jquery.com/one/ – j08691

回答

1

您可以unbind單擊事件。

$(function() {  
     $('.likepost').live('click', function() { 
      var post = $(this).closest('article'); 
      var id = post.attr('id'); 
      var oauth = post.attr('rel').slice(-8); 
      var count = parseInt($("#note_count_"+ id).text()); 
      var like = 'http://www.tumblr.com/like/'+oauth+'?id='+id; 
      $('#like-it').attr('src', like); 
      $(this).css({"background" : "url(http://static.tumblr.com/uiqhh9x/JYdlzwvnx/like2.png)"}); 
      $("#note_count_"+ id).text(count+1); 

      // unbind 
      $(this).unbind('click'); 

      return false; 
     }); 
}); 
+0

我該怎麼做?我一點都不擅長JavaScript。 –

+0

@Zhaohao我認爲,你的理論部分是對的,實際上不可能告訴用戶是否喜歡某個帖子。但它不止一次地工作.. –

+0

就像這樣。不要害怕閱讀jQuery的文檔。它充滿了例子。 – 3on

4
$("body").one("click", ".likepost", function() { 
//your code here 
}); 

通過使用.one()功能,您只允許點擊觸發一次。這是它的設計目的。理想情況下,您希望使用比。bodypost更接近它的父項,但最壞的情況是,您可以僅使用body作爲父項。