2016-10-14 1 views
-1

誰かが私は赤に色を変更したい第二のdiv上でクリックした場合、私は、ループ(同じコードが異なるdata-post-idループ内でこれからdivを探しますか?

<div class="vote"> 
    <div data-post-id="@item.PostId" data-vote-rank="1" class="vote-arrow vote-up glyphicon glyphicon-chevron-up"></div> 
    <div class="total-vote">0</div> 
    <div data-post-id="@item.PostId" data-vote-rank="-1" class="vote-arrow vote-down glyphicon glyphicon-chevron-down"></div> 
</div> 

で、このHTMLを持っています。

  • 最初はすべてのdivが黒です。
  • 誰かがクラス投票でdivをクリックした場合、色を赤に変更したいと思います。
  • 誰かがクラス投票で再びdivをクリックした場合、何も起こりません。
  • 誰かがクラスの投票ダウンを使ってdivをクリックした場合、クラス投票のdivは黒でなければならず、クラスの投票ダウンは緑でなければなりません。

問題は3つの状態があることです。私はクラスを有効にするために使用しようとしたが、これは(成功関数)は私が今来た限りです。

$(".vote-arrow").click(function() { 
    var postId = $(this).data("post-id"); 
    var voteRank = $(this).data("vote-rank"); 

    $.ajax({ 
     type: "GET", 
     url: "/Posts/Vote/", 
     data: { postId: postId, voteRank: voteRank }, 
     context: this, 
     success: function() { 
      switch (voteRank) { 
       case 1: 
        if ($(this).closest(".vote-arrow").hasClass("enabled")) { 
         $(this).css({ 'color': '#000' }); 
         $(this).addClass('enabled'); 
        } else { 
         $(this).css({ 'color': '#d9534f' }); 
         $(this).addClass('enabled'); 
        } 
        break; 
       case -1: 
        $(this).addClass('enabled'); 
        $(this).css({ 'color': '#5cb85c' }); 
        break; 
       default: 
      } 
     } 
    }); 
}); 

これが流れです。クリックして(上に赤、下に黒)、クリックして(両方とも黒)、もう一度クリックして(黒の上、緑の下)、上に(黒の両方)、上にもう一度上に黒はデフォルト値ですが、あなたは投票していません。

+1

まずだ、唯一の3のdivがあります。 2回目の1回目と3回目のクリックで何が起こるのですか? – Rajesh

+0

コード内の行はdivではありません。私のコードを更新することができます。しかし、ボタンは生成されたIDを持つボタンです。 – Xtreme

+0

私はまだあなたの要件を理解していないと思います。 – Rajesh

答えて

0

K Scandrettのように、RemoveやAddclassのようですが、あなたの場合はセレクタを拡張する必要があります。

$('.vote-arrow').click(function() 
 
{ 
 
    if($(this).parent().children('.vote-arrow').hasClass('enabled')) 
 
    { 
 
    $(this).parent().children('.vote-arrow').removeClass('enabled'); 
 
    } 
 
    else 
 
    { 
 
    $(this).addClass('enabled'); 
 
    } 
 
});
.vote-down.enabled 
 
{ 
 
\t color: green; 
 
} 
 
.vote-up.enabled 
 
{ 
 
\t color: red; 
 
}
<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet"/> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="vote"> 
 
    <div data-post-id="@item.PostId" data-vote-rank="1" class="vote-arrow vote-up glyphicon glyphicon-chevron-up"></div> 
 
    <div class="total-vote">0</div> 
 
    <div data-post-id="@item.PostId" data-vote-rank="-1" class="vote-arrow vote-down glyphicon glyphicon-chevron-down"></div> 
 
</div> 
 
<div class="vote"> 
 
    <div data-post-id="@item.PostId" data-vote-rank="1" class="vote-arrow vote-up glyphicon glyphicon-chevron-up"></div> 
 
    <div class="total-vote">0</div> 
 
    <div data-post-id="@item.PostId" data-vote-rank="-1" class="vote-arrow vote-down glyphicon glyphicon-chevron-down"></div> 
 
</div>

+0

これはほとんど私が探しているものです。 1.上向きの矢印をクリックすると、赤色(正しい)が表示されます。 2.(上矢印は赤)、下矢印をクリックします。あなたの例では、下向き矢印が緑色になり、上向き矢印が黒くなります。どちらも黒でなければなりません(デフォルト値、投票を開始する前の初期状態)。 3.もう一度下矢印をクリックすると、緑色に変わります。流れ。クリックして(上に赤、下に黒)、下に(両方とも黒)、下に(黒、下、緑)をクリックし、上に(両方とも黒)をクリックします。 – Xtreme

+0

私はそれを変更したので、あなたが作成した "有効"クラスでのみ、Loading ..のアイデアを使用します。 – Merschi

+0

上に書いたように、もう一度黒にならないはずの下矢印をクリックする必要はありません。ちょうど言って:) –

0

コードの最初の部分は 'voteUp' あなたのAjaxの戻り値をシミュレートすることです。

$('div.vote-arrow').click(function(){ 

    var voteUp = $(this).hasClass('vote-up') === true ? 1 : 0; 

    if (voteUp) { 
    $(this).parent().children().removeClass('red'); 
    $(this).addClass('green'); 
    } else { 
    $(this).parent().children().removeClass('green'); 
    $(this).addClass('red'); 
    } 
}); 

そして、 'グリーン' と '赤' のためのクラスを設定

EDIT:

$('div.vote-arrow').click(function(){ 

    var voteUp = $(this).hasClass('vote-up') === true ? 1 : 0; 

    if (voteUp) { 
    if ($(this).parent().children().hasClass('red')) { 
     $(this).parent().children().removeClass('red'); 
    } else { 
     $(this).addClass('green');  
    } 
    } else { 
    if ($(this).parent().children().hasClass('green')) { 
     $(this).parent().children().removeClass('green'); 
    } else { 
     $(this).addClass('red');  
    } 
    } 
}); 

ここjsbin http://jsbin.com/qipoguqipu/edit?html,js,output

+0

これはほとんど私が探しているものです1.上向きの矢印をクリックして赤色になる(正しい)2.(上向きの矢印は赤)、下矢印をクリックすると、下矢印が緑色になり、上矢印が黒くなります(デフォルト値、投票前の初期状態、投票しなかった場合と同じ)。下向き矢印をもう一度クリックすると、緑色になります。上向き(赤色、黒色)、下向き(黒色)、下向き(黒色、下向き、緑色)、上向き(黒色)の順にクリックします。 – Xtreme

+0

Mershiの答えには、私が使った一般的なものよりも優れたセレクタ '.children( '。vote-arrow')'があります。 –

関連する問題