Hủy / hủy window.setTimeout () trước khi nó xảy ra


194

Tôi có một vài nơi tôi sử dụng dòng dưới đây để xóa một trạng thái, ví dụ. Tôi có một vài trong số này tồn tại trong 10 giây trở lên và nếu người dùng nhấp vào xung quanh hành động có thể xảy ra vào các khoảng thời gian không chính xác.

window.setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

Có thể hủy hoặc hủy mã này với một số mã jQuery hoặc JavaScript, vì vậy tôi không có quá trình này treo xung quanh?

Câu trả lời:


374
var timer1 = setTimeout(function() { removeStatusIndicator(); }, statusTimeout);

clearTimeout(timer1)

101
cửa sổ chỉ là tên của không gian tên toàn cầu, vì vậy nó không thực sự cần thiết (đối với setTimeout hoặc ClearTimeout).
Matthew Crumley

7
Vì tham số đầu tiên cho setTimeout là một hàm và 'removeStatusTheicator ()' là một hàm, bạn có thể đạt được hiệu suất (và loại ít hơn) bằng cách đơn giản: var timer1 = setTimeout (removeStatusTheicator, statusTimeout); Điều này tránh các cuộc gọi chức năng lồng nhau.
HarleyDave

5
window.clearTimeout(timer1)sẽ không hoạt động trong Node.js. Chỉ cần sử dụng clearTimeout(timer1)hoặcglobal.clearTimeout(timer1)
CL22

2
@ user1944491 Sẽ không có lệnh gọi kép: lưu ý rằng @HarleyDave đã viết setTimeout(removeStatusIndicator, ...), tức là hàm removeStatusIndicatorkhông được gọi.
Frerich Raabe

3
Vui lòng bỏ qua những gì @ user1944491 đang nói - đó là sai. Hàm được truyền cho setTimeout không được gọi hai lần. Chrome đã không thay đổi hành vi của nó, nhiều khả năng bạn đã làm hỏng bằng cách gọi chức năng setTimeout( func(), 0 )thay vìsetTimeout( func, 0 )
Sethi

2

Window.clearTimeout () sẽ làm những gì bạn đang cố gắng đạt được.


6
Hãy giải thích câu trả lời của bạn và đưa ra một số ví dụ. Một câu trả lời tốt sẽ luôn có lời giải thích về những gì đã được thực hiện và tại sao nó được thực hiện theo cách như vậy, không chỉ cho OP mà còn cho khách truy cập tương lai của SO.
B001

4
+1 chỉ vì nhận xét ở trên trông hoàn toàn không liên quan và ngẫu nhiên với tôi. Câu trả lời trông hoàn toàn ổn, nó chỉ được đăng sau đó, vì vậy nó giống như một "bản sao-dán" của câu trả lời đã được cung cấp.
vir chúng tôi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.