Используя clearTimeout для отмены события тайм-аута

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

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

function bar() {
    alert("hi");
}
6
задан Brian Tompsett - 汤莱恩 21 July 2019 в 15:43
поделиться

3 ответа

Вам нужно сохранить результат 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");
}
19
ответ дан 8 December 2019 в 03:27
поделиться

Поскольку функция 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");
}
6
ответ дан 8 December 2019 в 03:27
поделиться

См. Документацию mozilla на window.setTimeout () :

setTimeout фактически возвращает ссылку, которую можно использовать для сброса тайм-аута :

tId = setTimeout(bar, 1000);
clearTimeout(tId);
4
ответ дан 8 December 2019 в 03:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: