Usando clearTimeout para cancelar un evento de tiempo de espera
-
19-09-2019 - |
Pregunta
Tengo el siguiente código, pero el tiempo de espera claro que no funciona y no puedo entender por qué, ¿alguien tiene alguna idea? (Usando el marco prototipo)
function foo() {
$("navigation").observe('mouseover',
function (event) {
clearTimeout(bar);
}
).observe('mouseout',
function (event) {
setTimeout(bar, 1000);
}
);
}
function bar() {
alert("hi");
}
Solución
Es necesario para almacenar el resultado de setTimeout
en una variable, y el uso de 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");
}
Otros consejos
Debido a la función clearTimeout
tomar el argumento devuelto 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");
}
Consulte la documentación Mozilla en window.setTimeout () :
setTimeout realidad devuelve una referencia que se puede utilizar para borrar el tiempo de espera :
tId = setTimeout(bar, 1000);
clearTimeout(tId);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow