Добавление класса к кнопке в jquery

#jquery #css

#jquery #css

Вопрос:

Я пытаюсь добавить класс css к моей кнопке после некоторого ajax:

 $('a.vote-up-0').click(function() {

    var id = $(this).siblings('.reply-id').val();
    var ajax_auth_token = $('#auth_token').val();


    $.post('user/?action=ajax', {
        vote_type: 'up',
        reply_id: id,
        auth_token: ajax_auth_token
    }, function(data, return_status) {   

        var json_data = jQuery.parseJSON(data);

        switch(json_data.r_message)
        {
           case "success": 
              output = "Yay it works!"; // change 
               alert(output);
               $(this).addClass('vote-up-1'); // ** the culprit **
           break;
  

Оповещение работает, однако оно не добавляет к нему класс, проголосовавший за 1. На странице есть несколько экземпляров одного и того же класса (т. Е. проголосовавших за 0), поэтому, если я изменю (это) на ‘проголосовавших за 0’, это изменит их все. У кого-нибудь есть идеи?

Комментарии:

1. поместите предупреждение после строки-виновника и проверьте

Ответ №1:

В верхней части вашего обработчика «click» сохраните this значение:

 var theButton = this;
  

Затем в вашем обработчике «.post()»:

 $(theButton).addClass('vote-up-1');
  

Проблема в том, что this не будет ссылаться на кнопку, когда jQuery вызывает ваш обработчик «.post()». Таким образом, вы сохраняете копию в локальную переменную, и она будет там ждать обработчика, когда придет время.

Ответ №2:

Брат: $(this).addClass('vote-up-1'); // ** the culprit ** действительно виноват. $(this) недоступен в этой области, поэтому лучше, чтобы вы получили дескриптор кнопки перед выполнением любого ajax. например:

var btnHnd = $(this); Теперь вы можете создавать материал для публикации: $.post('user/?action=ajax', { ...

Ответ №3:

измените это

  $(putyourbuttonidhere).addClass('vote-up-1');