我是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);
},
答案 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()
。