2012-01-17 42 views
86

tôi không thể có được .delay phương pháp làm việc trong jQuery:jQuery: Đợi/trễ 1 giây mà không cần thực thi mã

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

Tôi đang sử dụng một vòng lặp thời gian để chờ đợi cho đến khi thay đổi giá trị không kiểm soát được là lớn hơn hoặc bằng cách khác và tôi không thể tìm thấy bất kỳ cách nào để hault thực hiện trong X giây.

+0

hãy thử sử dụng setTimeout trong callback – theshadowmonkey

+0

gì phiên bản của jquery bạn đang sử dụng? – L7ColWinters

+1

không phải là chức năng trì hoãn được thiết kế cho, nó được thiết kế để sử dụng giữa các sự kiện xếp hàng đợi (như fade(). Delay(). Show()). Bạn cần hàm setTimeOut. – JoJa

Trả lời

131

$ .delay được sử dụng để trì hoãn hoạt ảnh trong hàng đợi, không dừng thực thi.

Thay vì sử dụng một vòng lặp trong khi, bạn cần phải đệ quy gọi một phương thức mà thực hiện việc kiểm tra mỗi giây sử dụng setTimeout:

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

check(); 
+0

Tôi nghĩ, setTimeout là đủ. – Jiemurat

+2

Của bạn bro bom, đây là chính xác những gì tôi cần để sửa mã của tôi. – jemiloii

+0

@Jiemurat và bất kỳ ai khác trong tương lai: setTimeout không phá vỡ luồng thực thi. Mã tuyệt vời của Niessner có được điều kiện này, điều kiện đã trở thành sự thật! – Gabrer

7

Javascript setTimeout là một giải pháp rất tốt:

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

funcx(); 

Các Chức năng delay trong jQuery chủ yếu được sử dụng để trì hoãn hoạt ảnh trong hàng đợi hoạt ảnh jQuery.

5

delay() không tạm dừng luồng mã, sau đó chạy lại. Không có cách thực tế để làm điều đó trong JavaScript. Tất cả mọi thứ phải được thực hiện với các chức năng gọi lại như setTimeout mà những người khác đã đề cập.

Mục đích của jQuery delay() là tạo hàng đợi hoạt ảnh chờ trước khi thực thi. Vì vậy, ví dụ: $(element).delay(3000).fadeIn(250); sẽ làm cho phần tử mờ dần sau 3 giây.

7

chức năng delay jQuery có nghĩa là để được sử dụng với hiệu ứng và hàng đợi hiệu lực thi hành, xem delay docs và ví dụ trong đó:

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

Nếu bạn muốn quan sát một biến cho những thay đổi, bạn có thể làm một cái gì đó giống như

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

setInterval có một tham số bắt buộc thứ hai, thời gian bằng mili giây;) –

+1

Cảm ơn @ sara.potyscki, cố định. –

+0

@JulianD. Cảm ơn bạn đã đề xuất này. Tôi đáp xuống câu hỏi này trong khi googling cho một giải pháp. Đây chính xác là những gì tôi cần cho dự án của mình. –

3

Javascript là ngôn ngữ lập trình không đồng bộ, do đó bạn không thể ngừng thực hiện một thời gian; cách duy nhất bạn có thể [giả] dừng một thực thi là sử dụng setTimeout() mà không phải là một sự chậm trễ mà là một "callback function bị trì hoãn".

165

Bạn cũng có thể chỉ trì hoãn một số hoạt động theo cách này:

setTimeout(function(){ 

    // Something you want delayed. 

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

Điều này hoạt động hoàn hảo !! – Kaos

+2

Chỉ cần một FYI, điều này không phá vỡ dòng chảy của thực hiện, vì vậy nếu bạn cần phải "ngừng tất cả mọi thứ" trong một vài giây, bạn sẽ cần một cái gì đó giống như những gì Niessner đã đăng. –

+0

Có ... đó là một cuộc gọi lại đến hàm và không chặn. Cảm ơn câu trả lời, nó đã khắc phục được sự cố của tôi. –

4

Chỉ javascript Nó sẽ làm việc mà không 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

Lặp lại để chờ trong javascript là một ý tưởng tồi! Tất cả chức năng javascript sẽ ** dừng ** trong khi vòng lặp đang chạy. Điều này sẽ có tác dụng phụ không lường trước được. Sẽ tốt hơn nếu sử dụng các chức năng không chặn như setTimeout(). –

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