2016-11-22 122 views
2

私はボタンを作成しました。ユーザがそれをクリックすると、現在のクラスを新しいクラスに置き換える必要があり、その逆もあります。 BUT addClassまたはremoveClassはどちらも効果を示さない。コンソールログにエラーや警告メッセージが表示されませんでした。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

コールバックのjQueryオブジェクトにcurEventを再ラップする必要はありません。 – mhodges

+0

ほとんどの場合、必要ではありません。それはブラウザにブラウザによって異なります。 これを包み込むことで普遍的に動作します –