ここに私のHTML/PHPがあります:
<p>
<span data-good="<?php echo $row['good']; ?>" data-wasVoted="<?php echo $row['wasVoted']; ?>" data-review="<?php echo $row['review_id']; ?>" class="upvote">Votes (<span class="good"><?php echo $row['good']; ?></span>)</span>
</p>
これは混乱のように見えます。申し訳ありませんが、これはテスト コードです。
ユーザーには、これは出力で次のように表示されます。
Votes (3) // 3 is just an example number.
これはクリック可能になります。ユーザーにクリックしてもらいたいのですが、すでに投票済みの場合は 3 が 2 になります。投票していない場合は 3 が 4 になります。これはdata-wasVoted
属性によって決まります。持っている場合は 1、持っていない場合は 0 です。(ユーザーが賛成票を投じたかどうかを識別できるように、スタイリングが行われます)。
この情報をサーバーに送信し、必要なものを取得する準備が整いました。これは生成された HTML のループ リストであるため、適切な番号を取得する良い方法がわかりません。そのため、一連の動的投票ボタンがあります。
これが私のjQueryです:
var review_id = $(this).data('review');
var was_voted = $(this).data('wasVoted');
var vote_total = $(this).data('good');
var new_text = $('.good');
$.ajax({
url : "php/reviews_upvote.php",
type : "POST",
dataType : "json",
data : {
reviewId : review_id
},
success : function(data) {
if (was_voted == 1) {
vote_total = vote_total - 1;
new_text.text(vote_total);
} else {
vote_total = vote_total + 1;
new_text.text(vote_total);
}
}
});
最初の問題は明らかに varnew_text
です。class
それは、何度も繰り返されることに基づいています。したがって、1 つをクリックすると、扱っている投票数だけでなく、ページ上のすべての投票数が変わります。必要な属性の一意の属性を特定するにはどうすればよいですか?
2番目の問題。ユーザーは 1 つしか投票できないため、was_voted
var が 1 の場合は 0 に、0 の場合は 1 に動的に変更する必要があります。
編集:php
が呼び出さ れた後にレンダリングされる HTML を追加しました。
<span data-good="2" data-wasvoted="1" data-review="2582" class="upvote">
Votes (<span class="good">2</span>)
</span>
data-good
得票数です。