2011-10-11 82 views
2

我有这段代码从数据库中获取一些运动统计信息,并更新它们 - 我试图在检测到更改时发出警报(#scorealert div)。如果只有一个分数发生了变化,这可以正常工作。当有多个更改时,它显示错误的名称 - 它会一直显示最后一个值,而不会更改名称。Javascript计时/循环问题?

仍然是初学者与JavaScript/ajax和学习..请温柔。

谢谢!

function getscores() { 

    $.post("/get_live_scores.php", {e: <?=$entryid;?>}, function(celldata) { 

    data = jQuery.parseJSON(celldata); 
    $.each(data, function(i,item) { 
     var pname = data[i].pname; 
     var cell = data[i].key; 
     var save_val = data[i].save_val; 
     var wins = data[i].wins; 
     var shutouts = data[i].shutouts; 
     var goals = data[i].goals; 
     var assists = data[i].assists; 
     var ht = data[i].ht; 
     var gwg = data[i].gwg; 

     if ($('td#'+cell+'_goals').text() < goals) { 
      $('div#scorealert').html('Goal by '+data[i].pname); 
      $('div#scorealert').animate({left: '0px'}); 
      $('div#scorealert').delay(4000).animate({left: '-300px'}); 
     } 
     updatecell(pname, cell, save_val, wins, shutouts, goals, assists, ht, gwg); 


    }); 

    updatetotal(); 
    }); 
}  
+0

您可能希望'var data ='(注意'var')将其保留在全局名称空间之外。 –

+0

也许检查结果是否按照正确的顺序进行?我看不出有什么不对的地方跳出来...... – nickf

+0

另外,'pname'是唯一不*更新的字段? –

回答

0

请检查e: <?=$entryid;?>

它是从PHP产生的?如果是这样,在php生成它并将其发送到浏览器后它不会改变。所以你的JavaScript总是会得到相同的值,并总是发布相同的数据。

+0

顶部有一些标题数据来处理这个问题: ' <? 标题(“content-type:application/x-javascript”); $ entryid = intval($ _ GET ['entryid']); ' etc ... –

+0

你是否有很多div classale scorealert?如何确保每个scorealert,只有该div被更新。它多次更新,所以你只能得到最后一个“目标”?请使用firebug追踪它... – Tommy

+0

请检查循环中“var pname”是否发生更改,如果更改,问题是$('div#scorealert')。html('Goal by'+ data [i]。 pname);你只是不断更新它在循环中... – Tommy

1

我说实话;我看不出为什么它只显示第一个。据我所知,它应该显示最后一个。原因是:在每个循环中,您都在div上调用.html(),这将用新内容替换该提醒div的内容。除非.delay()函数也中断了这个时间呢?

我会用.append()或另一个非破坏性的DOM添加函数将目标得分者(etc)添加到div中,然后在循环完成后调用动画(全部包含所有得分者)。

[编辑评论作者讨论的结果:]

由于.append()他们都添加到同一div(这是没有预期的效果),顺便让他们在不同的警报容器是根据需要动态创建这些容器。

+0

如果这样做,它应该显示列表中的最后一个,而不是第一个,尽管OP可能是错误的。 –

+0

对不起,你是对的。它实际上是显示最后的值两次。我已更新了我的初始帖子。 :( 我的目的是让这个盒子实际上滑入/滑出每一个新的分数警报,而不是一次显示它们。 –

+0

.append方法的工作原理和获取专有名称,尽管我更喜欢如果有人知道我的代码出了什么问题,我原本打算这么做,那很好。 现在,我得到了.append,这是好吧,谢谢! –