目的: vote.php将每个帖子的投票限制为每个IP一个。与新的投票值相比,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); }
它有效,而不是第一次通过。
答案 0 :(得分:0)
由于您从html元素获得总票数,请先尝试修剪它。 因为它只在第一次运行时执行此操作,所以html本身中的特定元素的标记可能会有一些内容,我将在其中进行更改。我亲自从服务器获得投票数。
我还从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