Usando clearTimeout cancelar um evento de tempo limite
-
19-09-2019 - |
Pergunta
Eu tenho o seguinte código, mas o tempo limite claro não funciona e eu não consigo entender por que, alguém tem alguma idéia? (Usando a estrutura Prototype)
function foo() {
$("navigation").observe('mouseover',
function (event) {
clearTimeout(bar);
}
).observe('mouseout',
function (event) {
setTimeout(bar, 1000);
}
);
}
function bar() {
alert("hi");
}
Solução
Você precisa armazenar o resultado de setTimeout
em uma variável, eo uso clearTimeout
para limpar essa variável, não a função:
var timer;
function foo() {
$("navigation").observe('mouseover',
function (event) {
clearTimeout(timer);
}
).observe('mouseout',
function (event) {
timer = setTimeout(bar, 1000);
}
);
}
function bar() {
alert("hi");
}
Outras dicas
Como a função clearTimeout
tomar o argumento retornou pela função 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");
}
Veja a documentação Mozilla no window.setTimeout () :
setTimeout realmente retorna uma referência que você pode usar para limpar o tempo limite :
tId = setTimeout(bar, 1000);
clearTimeout(tId);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow