Utilizzando clearTimeout annullare un evento di timeout
-
19-09-2019 - |
Domanda
Ho il seguente codice, ma il timeout chiaro non funziona e non riesco a capire il motivo per cui, qualcuno ha qualche idea? (Utilizzando il framework Prototype)
function foo() {
$("navigation").observe('mouseover',
function (event) {
clearTimeout(bar);
}
).observe('mouseout',
function (event) {
setTimeout(bar, 1000);
}
);
}
function bar() {
alert("hi");
}
Soluzione
È necessario memorizzare il risultato di setTimeout
in una variabile, e utilizzare clearTimeout
per cancellare quella variabile, non la funzione:
var timer;
function foo() {
$("navigation").observe('mouseover',
function (event) {
clearTimeout(timer);
}
).observe('mouseout',
function (event) {
timer = setTimeout(bar, 1000);
}
);
}
function bar() {
alert("hi");
}
Altri suggerimenti
Poiché la funzione clearTimeout
prendere l'argomento tornato dalla funzione 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");
}
Vedere la documentazione Mozilla su window.setTimeout () :
setTimeout in realtà restituisce un riferimento che è possibile utilizzare per azzerare il timeout :
tId = setTimeout(bar, 1000);
clearTimeout(tId);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow