Pregunta

Tengo el siguiente código, pero el tiempo de espera claro que no funciona y no puedo entender por qué, ¿alguien tiene alguna idea? (Usando el marco prototipo)

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

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

Solución

Es necesario para almacenar el resultado de setTimeout en una variable, y el uso de clearTimeout para borrar esa variable, no la función:

var timer;

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

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

Otros consejos

Debido a la función clearTimeout tomar el argumento devuelto por la función 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");
}

Consulte la documentación Mozilla en window.setTimeout () :

setTimeout realidad devuelve una referencia que se puede utilizar para borrar el tiempo de espera :

tId = setTimeout(bar, 1000);
clearTimeout(tId);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top