javascript - 在 settimeout 期间仅更新最后一个值

标签 javascript settimeout setinterval

Possible Duplicate:
Passing functions to setTimeout in a loop: always the last value?

我有以下代码:

var points = [{
        id1             : 1,
        id2             : 9,
        lat             : 44,
        lng             : 24
    },{
        id1             : 2,
        id2             : 7,
        lat             : 13,
        lng             : 29
    }];

当我尝试为数组点中的每个对象创建超时时,它仅更新最后一个元素

for (var i in points){
    setInterval(function(){
        drivePoint(points[i], i)
    }, 1000);
}

其中驱动点是发出ajax请求的函数:

function drivePoint(point, i){
        $.ajax({
            type: "POST",
            url: 'url',
            data: points[i]
        }).done(function(o){
            var data = $.parseJSON(o);
            points[i].lat           = data['lat'];
            points[i].lng           = data['lng'];
        });
    }

drivePoint的想法是更新给定点的坐标,但问题是它只更新最后一个,但是有多少个对象在points变量中而不是for (var i in points)循环来写这个分别

setInterval(function(){
    drivePoint(points[0], 0)
}, 1000);

setInterval(function(){
    drivePoint(points[1], 1)
}, 1000);

一切正常

不明白问题出在哪里

最佳答案

这里的问题是,当您的函数执行时,i 将被设置为循环中的最后一个值,因此在执行 drivePoint() 时将使用该值。但你真的需要每个点都有单独的间隔吗?您可以让间隔循环遍历所有值吗?

setInterval(function() {
    for (var i in points) {
        drivePoint(points[i], i);
    }
}, 1000);

关于javascript - 在 settimeout 期间仅更新最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12334893/

相关文章:

javascript - 使用CSS在html中的两个图像之间切换

Javascript如何使用setTimeout对列表进行迭代操作?

javascript - clearInterval 未清除 setInterval

javascript - Paperjs 弹跳动画

javascript - JQuery - 在屏幕上单击并拖动 div 而无需拖动

javascript - Jquery inArray() 方法在 Jquery 对象中查找类

JavaScript/JQuery : Need a time Delay

javascript setTimeout 无法识别函数参数

javascript - 使用 $.each 和 setInterval 循环播放连续动画?

javascript - Javascript 图表中的可拖动点