Использование clearTimeout для отмены события тайм-аута
-
19-09-2019 - |
Вопрос
У меня есть следующий код, но тайм-аут очистки не работает, и я не могу понять почему, у кого-нибудь есть какие-нибудь идеи?(Используя прототип фреймворка)
function foo() {
$("navigation").observe('mouseover',
function (event) {
clearTimeout(bar);
}
).observe('mouseout',
function (event) {
setTimeout(bar, 1000);
}
);
}
function bar() {
alert("hi");
}
Решение
Вам нужно сохранить результат 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");
}
Другие советы
Потому что 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");
}
Смотрите документы mozilla по window.setTimeout() окно.Настройка времени():
setTimeout фактически возвращает ссылку, которую вы можете использовать для сбросить тайм-аут:
tId = setTimeout(bar, 1000);
clearTimeout(tId);
Не связан с StackOverflow