2009-12-12 50 views
6

我有以下代碼,但清除超時不起作用,我不明白爲什麼,有沒有人有任何想法? (使用原型框架)使用clearTimeout取消超時事件

感謝

function foo() { 
    $("navigation").observe('mouseover', 
     function (event) { 
      clearTimeout(bar); 
     } 
    ).observe('mouseout', 
     function (event) { 
      setTimeout(bar, 1000); 
     } 
    ); 
} 

function bar() { 
    alert("hi"); 
} 

回答

19

您需要的結果的存儲setTimeout變量,並使用clearTimeout來清除該變量,而不是函數:

var timer; 

function foo() { 
    $("navigation").observe('mouseover', 
     function (event) { 
       clearTimeout(timer); 
     } 
    ).observe('mouseout', 
     function (event) { 
       timer = setTimeout(bar, 1000); 
     } 
    ); 
} 

function bar() { 
    alert("hi"); 
} 
+0

啊我現在明白了,謝謝你們:) – Rich 2009-12-12 14:12:05

+0

嘿,沒問題。請務必選擇其中一個答案作爲「接受」解決方案來標記答案。 – 2009-12-12 14:16:06

+0

當定時器變量不是全局的時候,我確實遇到了問題。我不得不使用window.timer;我建議你擴大你的答案。 – 2013-05-06 01:02:01

6

因爲clearTimeout功能拍攝setTimeout函數返回參數:

var t = null; 
function foo() { 
    $("navigation").observe('mouseover', 
     function (event) { 
      if (t != null) clearTimeout(t); 
     } 
    ).observe('mouseout', 
     function (event) { 
      t = setTimeout(bar, 1000); 
     } 
    ); 
} 

function bar() { 
    alert("hi"); 
}