使用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");
}
请参阅上 window.setTimeout Mozilla的文档():
的setTimeout实际上返回其可以用来清除超时参考一个>:
tId = setTimeout(bar, 1000);
clearTimeout(tId);
不隶属于 StackOverflow