7

好的,所以我在我的 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()来检查数组是否存在,然后循环并清除每个单独的超时。

但是,这是行不通的。希望有人能指出我正确的方向。非常感谢。

4

2 回答 2

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]);
    }
}
于 2012-10-23T14:51:01.180 回答
0

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

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

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));
}
于 2012-10-23T14:52:05.787 回答