3

目的: vote.php は、各投稿の投票を IP ごとに 1 つに制限します。jQuery は、新しい投票値と比較して古い投票値をチェックします。投票が増えると絵柄が変わる。票が減ると絵が変わる。投票が変わらない場合、写真はデフォルトのままです。

問題:値が等しい (window.alert で確認) にもかかわらず、スクリプトは最初の実行時に画像を変更します。最初の実行後のすべての実行は、意図したとおりに機能します。

問題のあるコード:

if (window.f != voteTotal.text()) {
//alert place here. voteTotal.text() && window.f are equal
if (votetype == "up") {

$('.bg').attr('src', 'tear.gif');
window.t=setTimeout('changeBack()', 3000);
}

else if (votetype =="down") {
$('.bg').attr('src', 'happy.gif');
window.t=setTimeout('changeBack()', 3000);
}
else {
changeBack();
}
}
else if(window.f == voteTotal.text()){
changeBack();
}
else {
changeBack();
}

var f は関数の外で宣言され、ユーザーが投票オプションをクリックして関数が呼び出されるとすぐに値が与えられます。

完全なコード:

var t;
var f;

function vote(vote_id, votetype) {
window.f = $('#vote' + vote_id).text();
$.post('vote.php', {id: vote_id, type: votetype },
function(output) {
$('#vote' + vote_id).html(output).show();
colorChange(vote_id, votetype);    
});    
}



function colorChange(vote_id, votetype) {
var voteTotal = $('#vote' + vote_id);



if (window.f != voteTotal.text()) {

if (votetype == "up") {

$('.bg').attr('src', 'tear.gif');
window.t=setTimeout('changeBack()', 3000);
}

else if (votetype =="down") {
$('.bg').attr('src', 'happy.gif');
window.t=setTimeout('changeBack()', 3000);
}
else {changeBack();}
}
else if(window.f == voteTotal.text()){
changeBack();
}
else {
changeBack();
}

 }



function changeBack() {
$('.bg').attr('src', 'bg.gif');

}

それで、どこで間違ったのですか?


このコードは、head タグ内の header.html に含まれています。表示されるのは .js ファイルです。これだけです。

if (window.f == voteTotal.text()) {window.alert('They are equal');}
else { window.alert('They are not equal: ' + voteTotal.text() + ' ' +window.f); }

私は完全に混乱しています

それは機能しますが、初めてではありません。

同じdivを2回クリックする

4

1 に答える 1

0

html 要素から総投票数を取得しているため、まずそれをトリミングしてみてください。これは最初の実行時にのみ行われるため、html 自体の特定の要素のマークアップに何か問題がある可能性があります。そこで変更します。ID は、サーバーから個人的に投票数を取得します。

また、colorchange 関数からいくつかのものを削除しました。

function vote(vote_id, votetype) {
  window.f = $.trim($('#vote' + vote_id).text());
  $.post('vote.php', {id: vote_id, type: votetype },
  function(output) {
        $('#vote' + vote_id).html(output).show();
  colorChange(vote_id, votetype);    
  });    
 }

function colorChange(vote_id, votetype) {
var voteTotal = $('#vote' + vote_id);

if (window.f != $.trim(voteTotal.text())) {        
//alert place here. voteTotal.text() && window.f are equal
    if (votetype == "up") {

       $('.bg').attr('src', 'tear.gif');
       window.t=setTimeout('changeBack()', 3000);
    }

    else if (votetype =="down") {
        $('.bg').attr('src', 'happy.gif');
        window.t=setTimeout('changeBack()', 3000);
    }


}else {

    changeBack();

}//if
}//changeColor
于 2013-02-12T01:59:05.423 に答える