Javascript:clearTimeout似乎只是暂停,没有重置或清除?

时间:2010-09-28 16:01:13

标签: javascript jquery

我是JS的新手,我正在尝试修改基于JavascriptKit jQuery的megamenu系统,以延迟显示菜单,直到鼠标悬停在锚点对象上指定的时间。

我现在面临的问题是,似乎在mouseout上调用的clearTimeout只挂起setTimeout,而不是取消,清除,重置它。

此时我只是在setTimeout调用后显示警告。目前我将超时间隔设置为2000进行测试。

作为一个例子,因为我现在将它设置为2秒延迟,如果我将对象鼠标悬停在对象上4次1/2秒,则第5次鼠标悬停在对象上我的测试警告框立即出现。

我认为clearTimeout应该完全破坏定时事件。为什么它似乎只是暂停倒计时?

teststuff:function(){
    if(jkmegamenu.toggletest==1)
     {
         jkmegamenu.executetimedcommand()
         jkmegamenu.toggletest=0
     }
    else
     {
         //jkmegamenu.executetimedcommandcancel()
         clearTimeout(jkmegamenu.teststuff);
     }
    },

    executetimedcommand:function(){
        if(jkmegamenu.toggletest==1)
        {
            alert('abcde')
        }
    },

    canceltimedcommand:function(){
    clearTimeout(jkmegamenu.teststuff);
},

2 个答案:

答案 0 :(得分:4)

clearTimeout将计时器ID作为参数,而不是函数引用。

例如,如果您为jkmegamenu.teststuff设置超时,则可以这样做

// set the delayed call
var timerID = setTimeout(jkmegamenu.teststuff, 2000);

// cancel it
clearTimeout(timerID);
timerID = 0;

答案 1 :(得分:0)

您将“teststuff”定义为函数,然后将其传递给clearTimeout()。如果变量从clearTimeout()返回,则传递给setTimeout()的内容。如果您将setTimeout()的返回值分配给“teststuff”,那么您将其重新定义,您将无法将原始值传递给clearTimeout()