2015-10-30 93 views
-1

我試圖用ajax替換button類,我做錯了什麼?jquery + ajax替換類

我的按鈕:

<input type="button" class="btn btn-default btn-sm addLike" name="{{ answer.pk }}" value="Like" ></input> 

我的JS:

$('.addLike').click(function(){ 

    $.ajax({ 
     type: "POST", 
     url: "{% url 'add_like' %}", 
     data: {'answer_pk': $(this).attr('name'), 
       'csrfmiddlewaretoken': '{{ csrf_token }}'}, 
     dataType: 'json', 
     success: function(response){ 
      alert(response.message); 
      if ($(this).hasClass('btn-default')) { 
       $(this).removeClass('btn-default').addClass('btn-success'); 
      } 
      else if ($(this).hasClass('btn-success')) { 
       $(this).removeClass('btn-success').addClass('btn-default'); 
       } 

      } 
    }); 
}) 

消息,它只是從我的Django的看法功能測試警報消息。只有替換元素存在問題

+2

回調裏面,'$(本)'指的是Ajax調用,而不是事件處理程序綁定到元素的jqXHR對象。 – Sushil

+2

您可以在ajax調用之前創建一個變量,並將當前對象設置爲該變量並在成功回調中使用它。 – Sushil

+0

謝謝,我會試試這個 –

回答

3

在回調中,$(this)指的是Ajax調用的jqXHR對象,而不是事件處理程序綁定到的元素。

嘗試這樣做。

$('.addLike').click(function() { 

    var element = this; // adding the current object in a variable 

    $.ajax({ 
     type: "POST", 
     url: "{% url 'add_like' %}", 
     data: { 
      'answer_pk': $(element).attr('name'), 
      'csrfmiddlewaretoken': '{{ csrf_token }}' 
     }, 
     dataType: 'json', 
     success: function(response) { 
      alert(response.message); 
      if ($(element).hasClass('btn-default')) { 
       $(element).removeClass('btn-default').addClass('btn-success'); 
      } else if ($(element).hasClass('btn-success')) { 
       $(element).removeClass('btn-success').addClass('btn-default'); 
      } 
     } 
    }); 
}); 

希望它有幫助。

+0

謝謝,它的工作! –

+0

但您標記了另一個解決方案作爲答案。我以爲你想在ajax成功回調裏面的對象? – Sushil

+0

哦,我只是覺得,問題可以有更多的一個解決方案,我儘量要禮貌:) –

1

一個簡單的toggleClass可以完成這個工作,而不需要檢查單個類並添加和刪除它們。

$("input").click(function() 
{ 
    $(this).toggleClass('btn-default btn-success'); 
    alert($(this).attr("class")); 
}); 

http://jsfiddle.net/vwLfxdya/

+0

謝謝,我也會試試這個 –