2010-09-09 32 views
12

tôi gặp sự cố lạ với chức năng trì hoãn ở đây bằng chức năng html với nó.JQuery: sử dụng độ trễ bằng cài đặt html hoặc văn bản không hoạt động

tôi thiết lập một văn bản html bằng cách sử dụng $('#element').html('Hello World');

Sau khi thiết lập các văn bản tôi muốn có được văn bản này biến mất trong 3 giây.

dòng Vì vậy, tiếp theo tôi đã viết:

$('#element').delay(3000).html('&nbsp'); 

này một công việc doesnt, nó đặt html để &nbsp mà không cần chờ 3 giây, nó trông giống như jquery được bỏ qua chức năng chậm trễ. Sử dụng này với fadeOut cho ví dụ hoạt động tốt. Tôi đoán điều này có liên quan đến hàng đợi này.

Nhưng tại sao tính năng này không hoạt động. Nó khá đơn giản, chờ 3 giây sau đó chạy chức năng html.

Ai có thể tư vấn cho bạn? Cảm ơn.

PS: Đối với thông tin của bạn, tôi sử dụng jQuery 1.4.2

Trả lời

19

chậm trễ() mặc định là hàng đợi hình ảnh động, cho hiệu ứng như fadeOut(), vv Bạn nên sử dụng setTimeout() thay vì:

window.setTimeout(function() { 
    $("#element").html(' '); 
}, 3000); 

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

jQuery.delay() là tốt nhất cho việc trì hoãn giữa các hiệu ứng jQuery được xếp hàng đợi và như vậy, và không phải là sự thay thế cho bản gốc của JavaScript Chức năng, có thể phù hợp hơn đối với một số trường hợp sử dụng nhất định.

+4

Để chính xác hơn, '.delay()' áp dụng cho bất kỳ * * đợi, nó chỉ * mặc định * vào hàng đợi hoạt hình :) –

+0

@Nick: cảm ơn cho sự điều chỉnh, cập nhật :-) –

+0

Cảm ơn này một cái hiện đang hoạt động. Một câu hỏi khác: tính năng này có hoạt động trên tất cả các trình duyệt không? im không chắc chắn nếu window.setTimeout sẽ làm việc trong tất cả các phiên bản IE và FF. – NovumCoder

14

.html() không phải là một chức năng xếp hàng đợi. Nếu bạn muốn nó xảy ra trong trật tự trong hàng đợi hình ảnh động, bạn sẽ phải .queue() đó cho mình, như thế này:

$('#element').delay(3000).queue(function(n) { 
    $(this).html('&nbsp'); n(); 
}); 

Nếu bạn không chaining được kết hình ảnh động hoặc bất cứ điều gì như thế này, sử dụng setTimeout() hoặc setInterval() (tùy theo cái nào phù hợp với tình huống) trực tiếp, .delay()just a wrapper cho setTimeout() và không có lý do gì để sử dụng thêm mã/độ phức tạp khi không cần.

Các vấn đề liên quan