目的: 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); }
それは機能しますが、初めてではありません。