2016-03-22 3 views
2

tangowithdjangoの指示にしたがってフォーラムのアプリに「好きな」ボタンを追加します。なぜ私のupvoteボタンは、最初の投稿のためにのみ動作しますか?

htmlファイルとJavaScript:

<script> 
 
$(document).ready(function(){ 
 
    $("#upvote").click(function(){ 
 
    var postid; 
 
    postid = $(this).attr("data-r-id"); 
 
    $.get('/upvote/', {post_id: postid}, function(data){ 
 
       $('#like_count').html(data); 
 
       
 
    }); 
 
    }); 
 
}); 
 
</script>
<a id="upvote" data-r-id="{{r.id}}" class="label-info label pull-right">赞<div id="like_count">{{r.upvotes}}</div></a>

views.py

def upvote(request): 
    post_id = None 
    if request.method == 'GET': 
     post_id = request.GET['post_id'] 
    votes = 0 
    if post_id: 
     p = post.objects.get(id=post_id) 
     if p : 
      votes = p.upvotes + 1 
      p.upvotes = votes 
      p.save() 
    return HttpResponse(votes) 

urls.py

urlpatterns = patterns(
    url(r'^upvote/$', 'upvote', name='upvote'), 
) 

WHE n #upvoteボタンをクリックすると、#like_countが1ずつ増加します。しかし、それは最初の投稿のためだけに機能します。私が残りの投稿をクリックすると、私は全く応答しません。

+0

を使用すると、同じページに複数のボタンを持っていますか?つまり、すべてのurボタンに同じidパラメータを使用していることを意味します。 idはhtml要素のIDであり、指定されたhtml文書上で一意でなければなりません。 –

答えて

3

idがドキュメント内の一意の要素を参照するため、upvoteをクラスIDとして使用しないことをお勧めします。

$(document).ready(function(){ 
    $(".upvote").click(function(){ 
    var postid; 
    postid = $(this).attr("data-r-id"); 
    $.get('/upvote/', {post_id: postid}, function(data){ 
       $('#like-count-' + postid).html(data); 

    }); 
    }); 
}); 

し、HTMLは次のようになります、

<a data-r-id="{{r.id}}" class="label-info label pull-right upvote">赞<div id="like-count-{{r.id}}">{{r.upvotes}}</div></a> 
+0

ありがとうございます!それは本当に私を多く助けます。しかし、2番目のボタンをクリックすると、最初の 'like_count'が1つ増えました。クラスとして 'like_count'を与えようとしました。今度は2つの 'like_count'の両方が増加しました... – ming

+0

@mingこれは一意でなければなりません。更新された投稿を確認してください。 –

+0

ありがとうございました!今はユニークです!本当にあなたの助けを感謝:) – ming

関連する問題