2011-07-06 10 views
0

.vote_divに含まれる作成した投票ボタンがあります。 2部:投票合計の.vote_num、投票ボタンの.vote。ページにはアイテムのリストがありますので、ユーザーが.voteをクリックすると、それが対応する.vote_num + 1を変更することを確認する必要があります。JS:1つのdivをクリックし、別のdiv値を変更します。

実際に.voteが投票総数二人を分ける。 .voteのクリックで.vote_numの権利を取得するにはどうすればよいですか?

ありがとうございます!

<script> 
$(".vote").click(function() { 
    var votes = $(this).attr('votes'); 
    $.post(
     '{% url vote %}', { 
      "id":this.id, 
    }, function(data) {}); 
    this.className = "voted"; 
    $(this).text(parseInt(votes) + 1); 
    return false; 
}); 
</script> 


    <div class="vote_div"> 
    <span class="vote_num" votes='{{host.num_votes}}'>{{host.num_votes}}</span> 
    <span class="vote" id="{{host.user.id}}">Vote</span> 
    </div> 

EDIT & SOLUTION:

が、それは$を使用して作業を手に入れた(この).parent():

<script> 
$(".vote").click(function() { 
    var votes = $(this).parent().find('.vote_num').attr('votes'); 
    $.post(
     '{% url vote %}', { 
      "id":this.id, 
    }, function(data) {}); 
    this.className = "voted"; 
    votes = parseInt(votes) + 1; 
    $(this).parent().find('.vote_num').text(votes); 
    return false; 
}); 
</script> 

答えて

1

試してみてください。

var votes = $(this).parent().find('.vote_num').attr('votes'); 

それがクリックされたの親に行きますdivは、vote_numの要素を探して、votesの属性を取得します。

@Jamesの回答はうまくいくはずですが、これにより、2つのdivを再配置して親を共有する限り、他の要素を追加することができます。これは、要素が深い限り、彼らは唯一の単一の親を持っているとして、任意に入れ子にすることができるようになります

var votes = $(this).parents('.vote_div').find('.vote_num').attr('votes'); 

(「親」の「s」を注意してください)、より堅牢なあなたができることする

`vote_div 'のクラス。

参照:http://api.jquery.com/parent/http://api.jquery.com/parents/、およびhttp://api.jquery.com/find/

+0

ありがとうDavy8は、上記の解決策で動作するようにしました。 – Emile

+0

@Emileは、さらに読むためのドキュメントへのリンクを追加しました。 – Davy8

0
var votes = $(this).attr('votes'); 

の投票 "クラスに属していない「投票'、それはクラス' vote_num 'に属します

したがって、行は

var votes = $(".vote_num").attr('votes'); 
0

あなたが投票して、複数のクラスを持っている場合は、多分あなたはそれぞれの()

$(".vote").each(function() { 
    var current = $(this); 
    current.click = function () { 
    // the rest of your function 
    } 

}) 
0

私が正しく質問を理解してきたと仮定し、またあなたのvote_num要素が常に最初の要素であると仮定を使用する必要がありますvote_div要素に:あなたのクリックイベントハンドラ内でこれを入れて

var votes = $(this).siblings().eq(0).attr("votes"); 

からvotes属性を取得しますクリックされた要素の最初の兄弟要素。

あなたが問題になっている要素は、常にクリックした要素の前に直接だろう確信している場合、これは簡単にすることができます。

var votes = $(this).prev().attr("votes"); 
+0

セレクタを 'eq()'の代わりに 'siblings()'に適用することができます。構造体が常に同じで、常に唯一のvote_num要素 'siblings( '。vote_num')'が 'eq(0)'を必要とせずにうまく動作すると仮定します。または、複数のオブジェクトを返し、最初のものだけが必要な場合は、 'siblings( '。vote_num')[0]'を使うことができます。 – musicinmyhead

0
$('.vote').click(function(){ 
    var $vote_num_obj = $(this).parent().find('.vote_num'); 
    var new_vote_num = parseInt($vote_num_obj.attr('votes'))+1; 

    $vote_num_obj.attr('votes', new_vote_num); 
    $vote_num_obj.html(new_vote_num); 
}); 

は、私は、データ-票へのごspan.vote_numの投票属性を変更しても、jqueryの属性セレクタを変更することをお勧め$('document').ready(function(){ ..here.. });

の内側には、このスクリプトを入れてくださいこの方法で標準に準拠します。