2011-04-19 11 views

cevap

141

setTimeout, belirli bir süre geçtikten sonra (milisaniye cinsinden ölçülür) bir kod yürütür. Ancak, önemli bir not:, kodun kalan zamanlayıcı sonra çalışmaya devam çünkü javascript doğanın kurgusunda:

$('#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

Bu, şu anda zayıf bir çözümdür çünkü .stop() gibi animasyon üzerinde jquery kontrolünün avantajını kaybeder. çok daha iyi bir çözüm .delay() – user151496

2

Orada bir fonksiyonudur, ancak ekstra var: http://docs.jquery.com/Cookbook/wait

Bu küçük pasajı beklemek sağlar:

$.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

Bu işlev yalnızca (a) animasyon kuyruğundaki kodu etkiler. – Pointy

35

Yani .delay() olurdu.

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

AJAX şeyler tho yapıyorsanız, gerçekten olmamalı "bitti" sadece otomatik yazma gerçekten bir yanıt bekleyin ve aslında yaptıysa görmelisiniz.

+1

Ayrıca, Steven'ı '.removeClass ('load')' yapmak istiyorsunuz, aksi takdirde her iki sınıfın da yükünü ve yapılmasını isteyebilirsiniz, ki bu muhtemelen istenmeyen bir durumdur. Eğer asenkronize bir eylemi tamamlamak için gerçekten bekliyorsanız, en iyi bahisten yapmaktır .addClass Bittiğinde ve başarılı ise .addClass ('error') belki bir fikir –

+38

Hayır "jQery" delay() "işlevi yol genel amaçlı "bekleme" tesisi gibi bir şey sağlar. Animasyon sisteminin bir parçası ve sadece animasyon kuyruğu için geçerlidir. Fonksiyon her zaman hemen döner ve yürütme duraklamadan devam eder. – Pointy

18

bu eski bir sorudur anla ama bunu gidermek için bir eklenti yazdım Birisi yararlı bulabilir. işi olmaz) örneğin Visit here for example

+1

Çok teşekkür ederim! – Blauhirn

-1

:

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

Eğer bunu sağlar. Delay() ile ilgili sorun, animasyon sisteminin bir parçasıdır ve yalnızca animasyon kuyrukları için geçerlidir.

Animasyon dışında bir şeyi yürütmeden önce ne beklemek isterseniz?

bunu kullanın:

?: olur Bu senaryoda o küme parantezleri içinde belirtilen kod yürütmeden önce 600 milisaniye bekler Ne
window.setTimeout(function(){ 
       // do whatever you want to do  
        }, 600); 

.

Bu, bir kez anladım ve size yardımcı olacağını umduğumda bana çok yardımcı oldu!

+16

Yanıtınız –

+3

çoğunluğunun bir bağlantısına güvenmemek en iyisi olarak kabul edilir. @JamesJenkins yorumunu yedeklemek için, bunun nedeni her zaman güvenilir değildir. Bir kişi bir bağlantı ekleyecekse, kodun kendisini cevabınıza da eklemesi en iyisidir. – Tass

11

gecikme (setTimeout fonksiyonunu kullanarak

$('#myElement').addClass('load').wait(2000).addClass('done'); 
İlgili konular