2016-11-22 4 views
2

Я создал кнопку, и когда пользователь нажимает на нее, текущий класс следует заменить новым и наоборот. BUT addClass или removeClass, оба не оказывают никакого эффекта. Я не видел никаких ошибок или предупреждений msgs в журнале консоли.jQuery removeClass и addClass не работает

код JQuery:

$('.vote_btn').click(function(){ 
    $.ajax({ 
     url:'/joseph/pages/votes.php', 
     type: 'post', 
     //dataType:'json', 
     data:{'comment_id':$(this).data('commentid')}, 
     success: function(data){ 
      if(data == 'up'){ 
       $(this).removeClass('fa-thumbs-o-up').addClass('fa-thumbs-up'); 
      } else if(data == 'reversed') { 
       $(this).removeClass('fa-thumbs-up').addClass('fa-thumbs-o-up'); 
      } else { 
      alert(data); 
      } 
     } 
    }); 
}); 

HTML код:

<span id="<?=$comment['id']?>" class="fa fa-thumbs-o-up vote_btn" data-commentid="<?=$comment['id']?>" data-postid="<?=$getpost['post_id']?>" data-who="<?=$comment['commenter_id']?>"></span> 
+6

'$ (это)' не относится к тому, что вы думаете, он делает в функции успеха. – nicovank

ответ

6

объект JQuery $(this) больше не относится к щелкнули .vote_btn. Внутри обратного вызова успеха, сохранить щелкнула кнопку в переменном и использовать этот переменный внутри функции обратного вызова:

$('.vote_btn').click(function(){ 
    var _this = $(this); 

    $.ajax({ 
     url:'/joseph/pages/votes.php', 
     type: 'post', 
     //dataType:'json', 
     data:{'comment_id':_this.data('commentid')}, 
     success: function(data){ 
      if(data == 'up'){ 
       _this.removeClass('fa-thumbs-o-up').addClass('fa-thumbs-up'); 
      } else if(data == 'reversed') { 
       _this.removeClass('fa-thumbs-up').addClass('fa-thumbs-o-up'); 
      } else { 
      alert(data); 
      } 
     } 
    }); 
}); 

Надеется, что это помогает.

2

Попробуйте это будет работать:

$('.vote_btn').click(function(){ 
    var curEvent=$(this); 
    $.ajax({ 
    url:'/joseph/pages/votes.php', 
    type: 'post', 
    //dataType:'json', 
    data:{'comment_id':$(this).data('commentid')}, 
    success: function(data){ 
     if(data == 'up'){ 
      $(curEvent).removeClass('fa-thumbs-o-up').addClass('fa-thumbs-up'); 
     } else if(data == 'reversed') { 
      $(curEvent).removeClass('fa-thumbs-up').addClass('fa-thumbs-o-up'); 
     } else { 
     alert(data); 
     } 
    } 
    }); 
    }); 
+1

Поскольку вы храните '$ (this)' в 'curEvent', нет причин повторно обернуть' curEvent' (т. Е. '$ (CurEvent)' ниже). Просто используйте 'curEvent.removeClass (...)' в вашей функции обратного вызова – War10ck

+0

Нет необходимости повторно обертывать curEvent в объекте jQuery в вашем обратном вызове. – mhodges

+0

нет в большинстве случаев, в которых это требуется. это зависит браузера от браузера. и, обертывая это, будет работать повсеместно. –

Смежные вопросы