关于多个引用的clearTimeout

时间:2011-09-23 14:05:04

标签: javascript jquery

我有一组复杂的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);

3 个答案:

答案 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); });