2012-07-29 58 views
1

首先抱歉,我是一個大的初學者,只是試驗,並且我用類似facebook的方式製作了類似Facebook的牆。Jquery ajax addClass問題

並且想添加一個like和不喜歡按鈕。

我從類似按鈕開始,它可以工作,喜歡和不喜歡,並且cookie可以完美地保存類的值。

我的問題是ajax調用,所以實際上,當我點擊類似按鈕時,它會覆蓋所有錨href val並向所有錨點添加一個類,而不是點擊什麼。

這裏是我的代碼

jQuery的

var cookieLike = "like_" 
$('a.like').each(function(){ 
    var id = $(this).attr('href'), cookieLiked = cookieLike + id; 

    switch($.cookies.get(cookieLiked)) { 
     case "unliked": 
      $(this).removeClass('btn-success'); 
     break; 
     case "liked": 
      $(this).addClass('btn-success'); 
     break; 
    } 
}).on('click', function(e){ 
    e.preventDefault() 
    var likeId = $(this).attr('href'); 
    $.ajax({ 
     url: "<?php echo base_url(); ?>stream/like/" + likeId , 
     type: "post", 
     data: likeId, 
     dataType: "json", 
     success: function(like) 
     { 

      if(like.likeStatus == "unliked") { 
       $('a.like').attr('href', likeId).removeClass('btn-success'); 
       $.cookies.set(cookieLike + likeId, 'unliked'); 

      }else if(like.likeStatus == "liked") { 
       $('a.like').attr('href', likeId).addClass('btn-success'); 
       $.cookies.set(cookieLike + likeId, 'liked'); 

      } 

     } 
    }); 

}); 

HTML

<div class="stream-bottom"> 
    <a href="#" class=" btn btn-mini comment">Komment</a> 
    <div class="pull-right like-options"> 
     <a href="<?php echo $sp->sid; ?>" class=" btn btn-mini like"><i class="icon-thumbs-up" title="tetszik"></i> </a> 
     <a href="<?php echo $sp->sid; ?>" class=" btn btn-mini dislike"><i class="icon-thumbs-down" title="nem tetszik"></i></a> 
    </div> 
</div> 

可以請人指出我缺少什麼?

+0

你期望的行爲是什麼? – devundef 2012-07-29 11:40:24

回答

4

可能:

.on('click', function (e) { 
    e.preventDefault(); 

    var button = $(this); 
    var likeId = button.attr('href'); 

    $.ajax({ 
     url: "<?php echo base_url(); ?>stream/like/" + likeId, 
     type: "post", 
     data: likeId, 
     dataType: "json", 

     success: function (like) { 
      if (like.likeStatus == "unliked") { 
       button.removeClass('btn-success'); 
       $.cookies.set(cookieLike + likeId, 'unliked'); 
      } else if (like.likeStatus == "liked") { 
       button.addClass('btn-success'); 
       $.cookies.set(cookieLike + likeId, 'liked'); 
      } 

     } 
    }); 
}); 
+0

謝謝它的工作:)謝謝你的回覆 – Side 2012-07-29 11:56:08

4

綁定目標元素(點擊的鏈接),並在成功回調

引用它在。對(「點擊」)回調

var $link = $(this); 

在成功回調使用

$(this).attr('href', likeId) 

而不是

$('a.like').attr('href', likeId) 
+0

謝謝你的回覆,但likeId等於$(this).attr('href');所以我不認爲我需要$(這個)在成功,或者也許是愚蠢的,仍然嘗試過但沒有任何反應 – Side 2012-07-29 11:47:16

+0

@SperanskyDanil'this'指的是當前事件被觸發的目標元素。它是你在建議的代碼中引用爲'button'的對象。 – 2012-07-29 11:51:07

+0

再次感謝你的回覆,我添加了投票 – Side 2012-07-29 11:56:30

0

當您使用$("a")$("a.like")您指的是整個一套錨標記或錨標記與「喜歡」作爲類名。要特別使用您點擊的錨點標籤,請使用$(this)變量。

這會給你生成事件的元素,在這裏是你點擊的錨點標記。