首页 文章

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

提问于
浏览
2

我是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 回答

  • 4

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

    例如,如果你为 jkmegamenu.teststuff 设置超时,你会这样做

    // set the delayed call
    var timerID = setTimeout(jkmegamenu.teststuff, 2000);
    
    // cancel it
    clearTimeout(timerID);
    timerID = 0;
    
  • 0

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

相关问题