У меня есть следующий код, но ясный тайм-аут не работает, и я не могу понять, почему, у кого-либо есть какие-либо идеи? (Используя Опытную платформу)
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);