2009-12-12 53 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"); 
}