使用clearTimeout取消超时事件

Ric*_*ich 6 javascript prototypejs dom-events

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

谢谢

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

function bar() {
    alert("hi");
}
Run Code Online (Sandbox Code Playgroud)

Dou*_*ner 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");
}
Run Code Online (Sandbox Code Playgroud)


Dar*_*rov 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");
}
Run Code Online (Sandbox Code Playgroud)