2011-04-19 47 views

Respuesta

141

setTimeout ejecutará algún código después de un retraso de un cierto período de tiempo (medido en milisegundos). Sin embargo, una nota importante: debido a la naturaleza de Javascript, el resto del código continúa funcionando después de que el temporizador está configurado:

$('#someid').addClass("load"); 

setTimeout(function(){ 
    $('#someid').addClass("done"); 
}, 2000); 

// Any code here will execute immediately after the 'load' class is added to the element. 
+1

esta es una solución pobre en este momento porque pierde la ventaja de tener control de jquery sobre la animación, como .stop(). una solución mucho mejor es .delay() – user151496

2

Hay una función, pero es extra: http://docs.jquery.com/Cookbook/wait

Este pequeño fragmento de código le permite esperar:

$.fn.wait = function(time, type) { 
    time = time || 1000; 
    type = type || "fx"; 
    return this.queue(type, function() { 
     var self = this; 
     setTimeout(function() { 
      $(self).dequeue(); 
     }, time); 
    }); 
}; 
+3

Esa función solo afecta al código en la (an) cola de animación. – Pointy

35

Eso sería .delay().

http://api.jquery.com/delay/

Si usted está haciendo AJAX Tho cosas, que realmente debería no sólo de auto escritura "hecho" que realmente debe esperar una respuesta y ver si en realidad está hecho.

+1

También Steven quiere '.removeClass ('load')' de lo contrario, puede agregar y cargar ambas clases, lo que probablemente no sea deseado. Si realmente está esperando que se complete una acción asincrónica, su mejor opción es hacer .addClass CUANDO se completa y tiene éxito, si no .addClass ('error') tal vez una idea –

+38

La función de "retardo()" de Ququery en ninguna way proporciona algo parecido a una instalación de "espera" de propósito general. Es parte del sistema de animación y solo se aplica a la cola de animación. La función siempre vuelve inmediatamente, y la ejecución continúa sin pausa. – Pointy

18

cuenta de que esto es una vieja pregunta, pero me escribió un plugin para hacer frente a esta problema que alguien pueda encontrarle útil.

https://github.com/madbook/jquery.wait

le permite hacer esto:

$('#myElement').addClass('load').wait(2000).addClass('done'); 
+1

¡Muchas gracias, loco! – Blauhirn

-1

Usando la función setTimeout, por ejemplo Visit here for example

+16

Se considera mejor no confiar en un enlace para la mayoría de su respuesta –

+3

Para respaldar el comentario de @JamesJenkins, esto se debe a que los enlaces no son siempre confiables. Si una persona debe agregar un enlace, es mejor incluir también el código en su respuesta. – Tass

11

retardo() no va a hacer el trabajo. El problema con la demora() es que forma parte del sistema de animación y solo se aplica a las colas de animación.

¿Qué sucede si quiere esperar antes de ejecutar algo fuera de la animación?

Utilice esta:

window.setTimeout(function(){ 
       // do whatever you want to do  
        }, 600); 

¿Qué ocurre ?: En este escenario se espera 600 milisegundos antes de ejecutar el código especificado dentro de las llaves.

¡Esto me ayudó mucho una vez que lo descubrí y espero que te ayude también!