我这里有这个代码,它从数据库中获取一些运动统计数据并更新它们 - 我正在尝试在检测到更改时发出警报(#scorealert div)。如果只有一个分数发生了变化,这样可以正常工作。当有多个更改时,它显示错误的名称 - 它会一直显示最后一个值,而不是更改名称。
还是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 :(得分:1)
我会诚实的;我不明白为什么它只显示第一个。据我所知,它应该显示最后一个。原因是:在每个循环中,您在div上调用.html()
,它将用新内容替换该警报div的内容。除非.delay()
函数也中断了它的时间安排?
我会使用.append()或其他非破坏性DOM添加功能将你的目标得分手(等)添加到div中,然后在循环结束后调用动画(全部是所有得分手)。
[编辑添加评论讨论结果:]
由于.append()将它们全部添加到同一个div(这不是所需的效果),将它们保存在不同的警报容器中的方法是在需要时动态创建这些容器。
答案 1 :(得分:0)
请检查e: <?=$entryid;?>
它是从php生成的吗?如果这是真的,它将在php生成它并将其发送到浏览器后不会改变。因此,您的javascript将始终获得相同的值,并始终发布相同的数据。