Използване на clearTimeout за отмяна на събитие за изчакване

Имам следния код, но изчистването на времето за изчакване не работи и не мога да разбера защо, някой има ли идеи? (Използване на рамката на прототипа)

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

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

person Rich    schedule 12.12.2009    source източник


Отговори (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");
}
person Doug Neiner    schedule 12.12.2009
comment
Хей, няма проблем. Не забравяйте да маркирате отговора като решен, като изберете един от отговорите като прието решение. - person Doug Neiner; 12.12.2009
comment
Всъщност имах проблем, когато променливата на таймера не беше глобална. Трябваше да използвам window.timer; Предлагам ви да разширите отговора си. - person Arturo Hernandez; 06.05.2013

Тъй като функцията 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");
}
person Darin Dimitrov    schedule 12.12.2009

Вижте документите на mozilla на window.setTimeout():

setTimeout всъщност връща препратка, която можете да използвате, за да изчистите времето за изчакване:

tId = setTimeout(bar, 1000);
clearTimeout(tId);
person David Snabel-Caunt    schedule 12.12.2009