我是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 回答
clearTimeout
将计时器ID作为参数,而不是函数引用 .例如,如果你为
jkmegamenu.teststuff
设置超时,你会这样做您将"teststuff"定义为函数,然后将其传递给
clearTimeout()
. 如果变量从setTimeout()
返回,则传递给clearTimeout()
的内容 . 如果您将setTimeout()
的返回值分配给"teststuff",那么您将其重新定义,您将无法将原始值传递给clearTimeout()
.