我有一个循环遍历数组元素的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
变量已经更改。我该如何解决这个问题?
答案 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);
};