2011-05-13 20 views

Respuesta

57

Usted puede utilizar setTimeout para ello:

setTimeout(function() { 
    // Your code here 
}, delayInMilliseconds); 

Ej:

$("#myName").val("Tom"); 

/// wait 3 seconds 
setTimeout(function() { 
    $("#YourName").val("Jerry"); 

    /// wait 3 seconds 
    setTimeout(function() { 
     $("#hisName").val("Kids"); 
    }, 3000); 
}, 3000); 

setTimeout programa una función que se ejecutará (una vez) después de un intervalo. El código que lo llama continúa, y en algún punto en el futuro (después de más o menos el tiempo que especifique, aunque no con precisión) el navegador llama a la función.

Supongamos que tiene una función llamada output que adjuntó texto a la página. La salida de este:

foo(); 
function foo() { 
    var counter = 0; 

    output("A: " + counter); 
    ++counter; 
    setTimeout(function() { 
     output("B: " + counter); 
     ++counter; 
     setTimeout(function() { 
      output("C: " + counter); 
      ++counter; 
     }, 1000); 
    }, 1000); 
    output("D: " + counter); 
    ++counter; 
} 

... es (después de un par de segundos):

A: 0 
D: 1 
B: 2 
C: 3

Nota de la segunda línea del mismo. El resto del código foo se ejecuta antes de cualquiera de las funciones programadas, por lo que vemos la línea D antes de la línea B.

setTimeout devuelve un identificador (que es un no-cero número) se puede utilizar para cancelar la devolución de llamada antes de que suceda:

var handle = setTimeout(myFunction, 5000); 
// Do this before it runs, and it'll never run 
clearTimeout(handle); 

También está el relacionado setInterval/clearInterval, que hace lo mismo, pero en repetidas ocasiones en el intervalo que especifique (hasta que lo detenga).

4

Puede usar la función setTimeout. Creo que la sintaxis es

window.setTimeout('$("#YourName").val("Jerry")',3000); 
+4

Parafraseando al Dalai Lama: Nunca use cadenas con 'setTimeout' si puede evitarlo. Siempre puedes evitarlo. –

+1

Él es un hombre sabio, ese tipo Lama – Gareth

+0

Él es el más sabio :) Tienes razón, debería haber puesto un descargo de responsabilidad sobre cómo poner el código js en cuerdas. – Jad

1

No se puede "retrasar" en JavaScript sin bloquear el navegador; es decir, el usuario no puede mover el mouse ni hacer clic en nada (¡indeseable durante más de 3 segundos!).

En su lugar, usted debe buscar en el establecimiento de un tiempo de espera, que se ejecutará el código designado algún momento en el futuro ...

$("#myName").val("Tom"); 
setTimeout(function() { 
    $("#YourName").val("Jerry"); 

    setTimeout(function() { 
     $("#hisName").val("Kids"); 
    }, 3000); 
}, 3000); 

Se puede extraer de la documentación para setTimeout aquí: https://developer.mozilla.org/en/window.setTimeout. Lo básico es que pasa una referencia de función o una cadena (que debe evitarse) como primer parámetro, con el segundo parámetro que especifica cuántos milisegundos debe demorar el código.

2

Si el retraso es siempre el mismo (3 en el ejemplo), es posible evitar código anidado y utilizar en lugar de setIntervalsetTimeout:

var i 
    , ids = ["myName", "YourName", "hisName"] 
    , names = ["Tom", "Jerry", "Kids"]; 

i = setInterval(function() { 
    if (ids.length > 0) { 
     $("#" + ids.shift()).val(names.shift()); 
    } else { 
     clearInterval(i); 
    } 
}, 3000); 
Cuestiones relacionadas