我有一组复杂的setTimeout()调用,可以触发一些jQuery动画。 我希望能够在不知道各种参考的情况下清除它们。
此代码不起作用 - 但应该说明我正在尝试做什么......
window.ref = [];
function doAnimation(i) {
$('div').each(function(index) {
window.ref.push(setTimeout('foo(index,i)',index*1000));
window.ref.push(setTimeout('bar(index,i)',index*2000));
});
}
然后用
清除它们clearTimeout(window.ref);
答案 0 :(得分:4)
我知道这已经有了一个可接受的答案,但只是因为那些超时ID一旦你清除它们就毫无价值,我会说:
if (window.ref) while(window.ref.length > 0) clearTimeout(window.ref.pop());
答案 1 :(得分:2)
那不正确你应该这样做:
window.ref = [];
function doAnimation(i) {
$('div').each(function(index) {
window.ref.push(setTimeout('foo(index,i)',index*1000));
window.ref.push(setTimeout('bar(index,i)',index*2000));
});
}
然后清楚如下:
for(var i=0;i<window.ref.length;i++){
clearTimeout(window.ref[i]);
}
答案 2 :(得分:1)
if (window.ref && window.ref.length > 0) for (var i in window.ref) {
clearTimeout(window.ref[i]);
}
或者以jQuery方式执行:
$.each(window.ref, function (index, value) { clearTimeout(value); });