3

目的: 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');

}

那么,我哪里做错了?


此代码包含在我的 header.html 中的 head 标签内。您看到的是 .js 文件。这就是全部。

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

我完全糊涂了

它有效,只是不是第一次通过。

第二次点击同一个 div

4

1 回答 1

0

由于您从 html 元素中获得总票数,请先尝试修剪它。由于它仅在第一次运行时执行此操作,因此 html 本身中该特定元素的标记可能存在一些问题,我将在那里进行更改。我亲自从服务器获取投票数。

我还从颜色更改功能中删除了一些东西。

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 回答