2009-12-12 6 views
6

Tengo el siguiente código pero el tiempo de espera claro no funciona y no puedo entender por qué, ¿alguien tiene alguna idea? (Utilizando el marco Prototipo)Uso de clearTimeout para cancelar un evento de tiempo de espera

Gracias

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

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

Respuesta

19

necesita almacenar el resultado de setTimeout en una variable, y use clearTimeout para borrar esa variable, no la función:

var timer; 

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

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

Ah entiendo ahora, gracias chicos :) – Rich

+0

Hey, no hay problema. Asegúrese de marcar la respuesta resuelta eligiendo una de las respuestas como la solución "aceptada". –

+0

En realidad tuve un problema cuando la variable del temporizador no era global. Tuve que usar window.timer; Te sugiero que amplíes tu respuesta. –

6

Dado que la función clearTimeout tomar el argumento regresaron por la función 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"); 
} 
4

Consulte la documentación de Mozilla en window.setTimeout():

setTimeout realidad devuelve una referencia que se puede utilizar para clear the timeout:

tId = setTimeout(bar, 1000); 
clearTimeout(tId); 
Cuestiones relacionadas