我有以下代码,但明确的超时不起作用,我不明白为什么,有没有人有任何想法? (使用Prototype框架)
由于
function foo() {
$("navigation").observe('mouseover',
function (event) {
clearTimeout(bar);
}
).observe('mouseout',
function (event) {
setTimeout(bar, 1000);
}
);
}
function bar() {
alert("hi");
}
答案 0 :(得分:19)
您需要将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");
}
答案 1 :(得分:6)
由于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");
}
答案 2 :(得分:4)
请参阅window.setTimeout()上的mozilla文档:
setTimeout实际上会返回一个可用于clear the timeout的引用:
tId = setTimeout(bar, 1000);
clearTimeout(tId);