2010-08-13 8 views
25

Ich versuche, einen kleinen Javascript-Trick zu tun, um ein div auszublenden, seinen Inhalt zu ersetzen und es wieder zu verblassen. Das .html Ereignis ersetzt den Inhalt bevor die fadeOut abgeschlossen ist ...jQuery .delay() verzögert nicht die .html() Funktion

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

Es erscheint, dass die .html() nicht durch die .delay() Verfahren verzögert wird.

+4

'.delay()' funktioniert nur bei Animationsereignissen, also '.delay()' aus diesem Kontext wird absolut nichts für Sie tun. Frustrierend, ich weiß. –

+0

finden Sie unter http://Stackoverflow.com/a/13351574/3779853 für 'fadeOut (500) .wait (500) .html (..)' – Blauhirn

Antwort

39

delay für Ihren Fall, wenn sie mit dem queue so benutzten:

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

Probieren Sie es hier: http://jsfiddle.net/n7j8Y/

+0

+1 meine 'chain()' war eigentlich die 'queue() '! ;) – Frankie

+0

+1 Dafür gibt es eine jQuery. –

+0

Zwei Dinge - Warum funktioniert '.delay()' '' nicht an '.html()' und was macht 'n()'? –

1

Sie können es ändern, um die Änderung zu machen, wenn die FadeOut mit dem Funktionsparameter fcallback abgeschlossen ist.

so wird es:

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

Vielleicht ist die "Warteschlange" So geht es, Aber diese Javascript-Lösung funktioniert besser für mich:

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