2012-01-17 13 views
86

nie mogę metodę .delay pracuje w jQuery:jQuery: Czekaj/Delay 1 sekundę bez wykonywania kodu

$.delay(3000); // not working 
$(queue).delay(3000); // not working 

Używam pętli while poczekać do niekontrolowanego zmienia wartość jest większa lub równy drugiemu i nie mogę znaleźć żadnego sposobu wykonania haulta przez X sekund.

+0

spróbować użyć setTimeout w zwrotnego – theshadowmonkey

+0

jaka wersja jQuery używasz? – L7ColWinters

+1

Nie jest to funkcja, dla której zaprojektowano funkcję opóźnienia, jest przeznaczona do użycia między kolejkowanymi zdarzeniami jquery (takimi jak fade(). Delay(). Show()). Potrzebujesz funkcji setTimeOut. – JoJa

Odpowiedz

131

$ .delay służy do opóźnienia animacji w kolejce, a nie zatrzymania wykonania.

Zamiast pętli while, trzeba rekursywnie wywołać metodę, która wykonuje sprawdzanie co drugi używając setTimeout:

var check = function(){ 
    if(condition){ 
     // run when condition is met 
    } 
    else { 
     setTimeout(check, 1000); // check again in a second 
    } 
} 

check(); 
+0

Myślę, że setTimeout wystarczy. – Jiemurat

+2

Twój brat bomby, to jest dokładnie to, czego potrzebowałem, aby naprawić mój kod. – jemiloii

+0

@Jiemurat i każda inna osoba w przyszłości: setTimeout nie przerywa procesu wykonywania. Wielki kod Niessnera uzyskał ten tytuł, a warunki spełniły się! – Gabrer

7

JavaScript setTimeout Jest to bardzo dobre rozwiązanie:

function funcx() 
    { 
    // your code here 
    // break out here if needed 
    setTimeout(funcx, 3000); 
    } 

funcx(); 

delay Funkcja w jQuery służy głównie do opóźniania animacji w kolejce animacji jQuery.

5

delay() nie zatrzymuje przepływu kodu, a następnie ponownie go uruchomić. Nie ma praktycznego sposobu na to w JavaScript. Wszystko musi być zrobione z funkcjami, które pobierają wywołania zwrotne, takie jak setTimeout, o których wspominali inni.

Celem jQuery's delay() jest wykonanie oczekiwania kolejki animacji przed wykonaniem. Na przykład $(element).delay(3000).fadeIn(250); spowoduje, że element zniknie po 3 sekundach.

7

delay funkcja jQuery jest przeznaczone do pracy z efektami i kolejek efekt, zobaczyć delay docs i przykład jego postanowień:

$('#foo').slideUp(300).delay(800).fadeIn(400); 

Jeśli chcesz obserwować zmienną do zmian, można zrobić coś takiego

(function() { 
    var observerInterval = setInterval(function() { 
     if (/* check for changes here */) { 
      clearInterval(observerInterval); 
      // do something here 
     } 
    }, 1000); 
})(); 
+0

setInterval ma drugi obowiązkowy parametr, czas w milisekundach;) –

+1

Dzięki @ sara.potyscki, poprawiony. –

+0

@JulianD. Dziękuję za tę sugestię. Wylądowałem na to pytanie, szukając rozwiązania. Dokładnie tego potrzebowałem w moim projekcie. –

3

Javascript jest asynchronicznym językiem programowania, więc nie można zatrzymać wykonania przez pewien czas; jedynym sposobem [pseudo] zatrzymania wykonywania jest użycie funkcji setTimeout(), która nie jest opóźnieniem, ale "opóźnionym wywołaniem funkcji".

165

Można też po prostu opóźnić niektóre operacje w ten sposób:

setTimeout(function(){ 

    // Something you want delayed. 

}, 5000); // How long do you want the delay to be (in milliseconds)? 
+0

Działa to doskonale !! – Kaos

+2

Po prostu FYI, nie łamie to przepływu egzekucji, więc jeśli chcesz "zatrzymać wszystko" na kilka sekund, będziesz potrzebować czegoś takiego, co napisał Nielsen. –

+0

Tak ... jest to wywołanie zwrotne funkcji i nie jest blokowane. Dzięki za odpowiedź, naprawiłem mój problem. –

4

Tylko javascript To będzie działać bez jQuery

<!DOCTYPE html> 
<html> 
    <head> 
     <script> 
      function sleep(miliseconds) { 
       var currentTime = new Date().getTime(); 
       while (currentTime + miliseconds >= new Date().getTime()) { 
       } 
      } 

      function hello() { 
       sleep(5000); 
       alert('Hello'); 
      } 
      function hi() { 
       sleep(10000); 
       alert('Hi'); 
      } 
     </script> 
    </head> 
    <body> 
     <a href="#" onclick="hello();">Say me hello after 5 seconds </a> 
     <br> 
     <a href="#" onclick="hi();">Say me hi after 10 seconds </a> 


    </body> 
</html> 
+0

Zapętlanie do czekania w javascript jest złym pomysłem! Wszystkie funkcje javascript ** zatrzymają się ** podczas pracy pętli. Będzie to miało nieprzewidziane skutki uboczne. Znacznie lepiej jest używać funkcji bez blokowania, takich jak setTimeout(). –

Powiązane problemy