2011-01-19 64 views
124

Tôi muốn widget.Rotator.rotate() bị trì hoãn 5 giây giữa các cuộc gọi ... làm thế nào để làm điều này trong jQuery ... nó có vẻ như jQuery delay() sẽ không làm việc cho này ...Làm cách nào để trì hoãn cuộc gọi chức năng trong 5 giây?

+3

Bạn có muốn nó tự động được gọi với một sự chậm trễ 5 giây giữa lời gọi, hoặc điều này sẽ được gọi là đáp ứng với hành động của người dùng và bạn muốn đảm bảo rằng nó chờ ít nhất 5 giây sau lần gọi cuối cùng trước khi trở lại? Nếu sau này, người dùng có thể xếp hàng các sự kiện hay không hoặc liệu đầu vào có bị bỏ qua nếu 5 giây chưa trôi qua không? – Phrogz

Trả lời

269

Bạn có thể sử dụng javascript đơn giản, điều này sẽ gọi your_func một lần, sau 5 giây:

setTimeout(function() { your_func(); }, 5000); 

Nếu chức năng của bạn không có thông số và không nhận rõ ràng bạn có thể gọi trực tiếp setTimeout(func, 5000)

Ngoài ra còn có một plugin tôi đã sử dụng một lần. Nó có các phương thức oneTimeeveryTime.

+24

Nếu không có tham số hàm, không cần phải bọc trong 'hàm' - điều này sẽ làm tốt:' setTimeout (your_func, 5000); ' – Oded

+1

@Oded Bạn có chắc chắn rằng 'Rotator.rotate()' không cần thiết bị thu được đặt thành 'Rotator'? Nếu bạn perfom những gì bạn đề nghị, 'this' sẽ là cửa sổ. – Phrogz

+1

@Phrogz - Tôi đã nói về cơ chế 'setTimout'. – Oded

18
var rotator = function(){ 
    widget.Rotator.rotate(); 
    setTimeout(rotator,5000); 
}; 
rotator(); 

Hoặc:

setInterval(
    function(){ widget.Rotator.rotate() }, 
    5000 
); 

Hoặc:

setInterval(
    widget.Rotator.rotate.bind(widget.Rotator), 
    5000 
); 
Các vấn đề liên quan