使用clearTimeout取消超时事件

时间:2009-12-12 14:04:34

标签: javascript javascript-events prototypejs

我有以下代码,但明确的超时不起作用,我不明白为什么,有没有人有任何想法? (使用Prototype框架)

由于

function foo() {
    $("navigation").observe('mouseover',
        function (event) {
            clearTimeout(bar);
        }
    ).observe('mouseout',
        function (event) {
            setTimeout(bar, 1000);
        }
    );
}

function bar() {
    alert("hi");
}

3 个答案:

答案 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);