清除setTimeout的数组

时间:2012-10-23 14:47:36

标签: javascript jquery tooltip

好的,所以我在我的AJAX应用程序中有一个功能,它在一定时间后将工具提示放在角落里,以帮助提示用户以及他们正在做什么。还有第二个功能可以在用户点击其他地方时清除超时,因为工具提示不再相关。

我现在开始遇到一个问题,即在超时时设置多个工具提示,设置它们很好但是如果用户继续,我找不到有效的方法来取消它们。

目前我的代码看起来像这样

var tuttimer = new Array();

function showtooltip(uniqueid, delay){
    tuttimer[uniqueid] = setTimeout(function(){
        //Create tooltip code here
    },delay);
}

function clearTuttimer(){
    if(typeof tuttimer != 'undefined'){
        for (var i = 0; i < tuttimer.length; i++) {
            clearTimeout(tuttimer[i]);
        }
    }
}

因此tuttimer数组是在页面加载时创建的,然后每当用户执行某些工具提示以显示调用showtooltip()函数时,会给出一个唯一的id和延迟时间。

但是如果用户继续使用其他东西,它会调用函数clearTuttimer()来检查数组是否存在,然后循环并清除每个单独的超时。

然而这不起作用。希望有人可以指出我正确的方向。非常感谢。

2 个答案:

答案 0 :(得分:13)

如果使用数组,则使用Array.push方法。

var tuttimer = [];

function showtooltip(delay){
    tuttimer.push(setTimeout(function(){
        //Create tooltip code here
    },delay));
}

function clearTuttimer(){
    for (var i = 0; i < tuttimer.length; i++) {
        clearTimeout(tuttimer[i]);
    }
}

如果您想使用uniqueid,请使用对象而不是数组。

var tuttimer = {};

function showtooltip(uniqueid, delay){
    tuttimer[uniqueid] = setTimeout(function(){
        //Create tooltip code here
    },delay);
}

function clearTuttimer(){
    for (var k in tuttimer) {
        clearTimeout(tuttimer[k]);
    }
}

答案 1 :(得分:0)

像往常一样只是输入问题让我看到了我的方式错误。

问题来自于我将array关键字设置为某个预定义的值,然后当我循环时我正在寻找数字键。为了克服这一点,我修改了

function showtooltip(uniqueid, delay){
    tuttimer[uniqueid] = setTimeout(function(){
        //Create tooltip code here
    },delay);
}

function showtooltip(uniqueid, delay){
    tuttimer.push(setTimeout(function(){
        //Create tooltip code here
    },delay));
}