Pergunta

Eu tenho o seguinte código, mas o tempo limite claro não funciona e eu não consigo entender por que, alguém tem alguma idéia? (Usando a estrutura Prototype)

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

function bar() {
    alert("hi");
}
Foi útil?

Solução

Você precisa armazenar o resultado de setTimeout em uma variável, eo uso clearTimeout para limpar essa variável, não a função:

var timer;

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

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

Outras dicas

Como a função clearTimeout tomar o argumento retornou pela função 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");
}

Veja a documentação Mozilla no window.setTimeout () :

setTimeout realmente retorna uma referência que você pode usar para limpar o tempo limite :

tId = setTimeout(bar, 1000);
clearTimeout(tId);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top