2010-08-13 8 views
25

Estoy tratando de hacer un pequeño truco de JavaScript para atenuar un div, reemplazar su contenido y volverlo a fundir. El evento .html está reemplazando el contenido antes de la fadeOut es completa ...jQuery .delay() no retrasa la función .html()

$("#products").fadeOut(500) 
       .delay(600) 
       .html($("#productPage" + pageNum).html()) 
       .fadeIn(500); 

se parece que el .html() no se está retrasando por el método .delay().

+4

'.delay()' solo funciona en eventos de animación, por lo que '.delay()' fuera de ese contexto no hará absolutamente nada por ti. Frustrante, lo sé. –

+0

, consulte http://stackoverflow.com/a/13351574/3779853 para 'fadeOut (500) .wait (500) .html (..)' – Blauhirn

Respuesta

39

delay trabajará para su caso cuando se utiliza con el queue así:

$("#products").fadeOut(500) 
    .delay(600) 
    .queue(function(n) { 
     $(this).html("hahahhaha"); 
     n(); 
    }).fadeIn(500);​ 

probar aquí: http://jsfiddle.net/n7j8Y/

+0

+1 mi 'cadena()' era en realidad 'queue() '! ;) – Frankie

+0

+1 Hay un jQuery para eso. –

+0

Dos cosas: ¿por qué '.delay()' no funciona en '.html()' y qué hace 'n()'? –

1

puede cambiarlo para realizar el cambio cuando se completa fadeOut con el parámetro de función fcallback.

por lo que se convierte en:

$("#products").fadeOut(500, function() { 
    $(this).html($("#productPage" + pageNum).html()); 
    $(this).fadeIn(500); 
}); 
0

Tal vez la "cola" está bien, Pero esta solución de javascript funciona mejor para mí:

setTimeout (function(){ 
     $("#products").html('Product Added!'); 
    },1000);