2010-08-13 35 views
25

Tôi đang cố gắng thực hiện một mẹo nhỏ để làm mờ một div, thay thế nội dung của nó và làm mờ nó trở lại. Sự kiện .html đang thay thế nội dung trước fadeOut hoàn tất ...jQuery .delay() không trì hoãn hàm .html()

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

xuất hiện rằng .html() không bị trì hoãn theo phương pháp .delay().

+4

'.delay()' chỉ hoạt động trên các sự kiện hoạt ảnh, vì vậy '.delay()' trong ngữ cảnh đó sẽ hoàn toàn không có gì cho bạn. Bực bội, tôi biết. –

+0

hãy xem http://stackoverflow.com/a/13351574/3779853 cho 'fadeOut (500) .wait (500) .html (..)' – Blauhirn

Trả lời

39

delay sẽ làm việc cho trường hợp của bạn khi sử dụng với các queue như thế này:

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

Hãy thử nó ở đây: http://jsfiddle.net/n7j8Y/

+0

+1 chuỗi 'của tôi()' thực sự là 'hàng đợi() '! ;) – Frankie

+0

+1 Có một jQuery cho điều đó. –

+0

Hai thứ - Tại sao '.delay()' không hoạt động trên '.html()' và 'n()' làm gì? –

1

bạn có thể thay đổi nó để thực hiện thay đổi khi fadeOut được hoàn thành bằng thông số hàm fcallback.

để nó trở thành:

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

Có lẽ "hàng đợi" cách nó ok, Nhưng giải pháp javascript này hoạt động tốt hơn cho tôi:

setTimeout (function(){ 
     $("#products").html('Product Added!'); 
    },1000); 
Các vấn đề liên quan