For循环中setTimeout的问题

时间:2014-06-11 17:32:09

标签: javascript jquery css3

我有一个循环遍历数组元素的for循环,构造一个jQuery目标,对它应用一个类然后将其删除。

remove触发css3 @keyframes动画需要0.2秒。然后它继续实际删除DOM元素。这在理论上是有效的。

for (var i = playerBuffs.length - 1; i >= 0; i--) {

    var target = '#bufflist-' + playerBuffs[i][5];
    $(target).addClass('remove');
    setTimeout(function(){$(target).remove();},200);

};

为了删除元素,有些条件必须是真的(为了简单起见,我没有在这里粘贴代码),所以有时会删除几个元素。

但是,在这种情况下,循环运行此代码一次,设置超时,然后立即重新运行代码。因此,在timeout触发的时间点,target变量已经更改。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

target在循环函数周围被关闭,而不是循环本身。

for (var i = playerBuffs.length - 1; i >= 0; i--) {

    var target = '#bufflist-' + playerBuffs[i][5];
    (function(target) {
       $(target).addClass('remove');
       setTimeout(function(){$(target).remove();},200);
    })(target);

};