2012-01-17 1871 views
86

我不能得到.delay方法jQuery中工作:jQuery的:等待/延遲1秒而不執行代碼

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

我使用一個while循環等待直到不受控制的改變值是大於或等於另一個,我找不到任何方法來拖延執行X秒。

+0

工作,嘗試在回調 – theshadowmonkey 2012-01-17 14:31:03

+0

您使用的是什麼版本的jQuery使用的setTimeout?是不是什麼延遲功能是專爲 – L7ColWinters 2012-01-17 14:31:09

+1

,它是專爲排隊jQuery的事件之間的使用(如淡入()。延遲()。節目())。你需要setTimeOut函數。 – JoJa 2012-01-17 14:35:25

回答

131

$ .delay用來延遲動畫在隊列中,不停止執行。

而不是使用一個while循環,你需要遞歸調用執行檢查的方法每秒使用setTimeout

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

check(); 
+0

我想,setTimeout就夠了。 – Jiemurat 2013-10-28 01:03:38

+2

您的炸彈兄弟,這正是我需要修復我的代碼。 – jemiloii 2014-02-19 03:03:19

+0

@Jiemurat以及將來的其他人:setTimeout不會中斷執行流程。 Niessner的偉大代碼獲得這個無用的條件成爲現實! – Gabrer 2014-12-05 17:13:35

7

的JavaScript setTimeout是一個很好的解決方案:

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

funcx(); 

delay jQuery中的函數主要用於延遲jQuery動畫隊列中的動畫。

5

delay()不制止碼流,然後重新運行它。在JavaScript中沒有切實可行的方法。一切都必須用回調函數來完成,如其他人提到的setTimeout

jQuery的delay()的目的是在執行前製作動畫隊列等待。因此,例如$(element).delay(3000).fadeIn(250);將使該元素在3秒後淡入。

7

jQuery的delay函數的含義與作用和效果隊列中使用,請參閱delay docs和其中的例子:

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

如果你想觀察更改的變量,你可以做類似

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

setInterval有第二個必需參數,時間以毫秒爲單位) – 2015-10-12 07:26:31

+1

謝謝@ sara.potyscki,修正了。 – 2015-10-12 09:11:44

+0

@JulianD。感謝您的建議。我在搜索解決方案時登陸這個問題。這正是我爲我的項目所需要的。 – 2017-09-22 14:57:36

3

JavaScript是一種異步編程語言,所以你不能停止執行的時間;您可以[僞]停止執行的唯一方法是使用setTimeout(),它不是延遲,而是「延遲的函數回調」。

165

你也可以拖延一些操作是這樣的:

setTimeout(function(){ 

    // Something you want delayed. 

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

這完美的作品! – Kaos 2012-10-24 14:55:02

+2

僅供參考,這不會中斷執行流程,所以如果您需要「停止一切」幾秒鐘,您將需要類似Niessner發佈的內容。 – 2015-01-10 00:48:05

+0

是的......它是對函數的回調,並不會阻塞。感謝您的答案,它解決了我的問題。 – 2015-05-02 20:46:35

4

只有JavaScript將不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

循環等待javascript是一個壞主意!當循環運行時,所有javascript功能將**停止**。這將會產生意想不到的副作用。使用setTimeout()之類的非阻塞函數要好得多。 – 2016-07-12 20:26:12