2010-09-28 38 views
2

我很新的JS,我試圖修改基於jQuery的JavascriptKit megamenu系統延遲顯示,直到鼠標一直徘徊在錨對象在指定的時間菜單。Javascript:clearTimeout似乎只能暫停,不能重置或清除?

我面對現在的問題是,它似乎被稱爲鼠標移開時的clearTimeout只暫停setTimeout的,而不是取消,結算,將其復位。

在這一點上,我只是呈現出setTimeout調用後報警。目前我的超時時間間隔設置爲2000進行測試。

作爲一個例子,因爲我有它設置爲2秒延時現在吧,如果我的鼠標在對象上4次1/2秒,第五次我將鼠標放在物體瞬間出現在我的測試警告框。

我以爲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

請使用代碼標籤。 – 2010-09-28 16:03:38

+0

這是我第一篇文章。找到了代碼按鈕。下次會使用它。 – 2010-09-28 18:23:00

+0

如果它解決了您的問題,請不要忘記接受答案(*咳嗽*我*咳嗽*):D – lincolnk 2010-09-28 18:27:10

回答

4

clearTimeout將定時器ID作爲參數,而不是函數引用。

例如,如果你設置一個超時jkmegamenu.teststuff,你會做這樣的

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

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

非常有幫助。謝謝! – 2010-09-28 18:21:57

0

你定義「teststuff」的功能,然後將它傳遞給clearTimeout()。如果從setTimeout()返回的變量應傳遞給clearTimeout()。如果你指定的setTimeout()爲「teststuff」的返回值,那麼你redfine它,你將不能夠到原來的值傳遞給clearTimeout()

+0

非常有幫助。謝謝! – 2010-09-28 18:22:32