Batalkan / bunuh window.setTimeout () sebelum itu terjadi


194

Saya punya beberapa tempat di mana saya menggunakan baris di bawah ini untuk menghapus status, misalnya. Saya punya beberapa di antaranya yang hang out selama 10 detik atau lebih dan jika pengguna mengklik tindakan dapat terjadi pada interval waktu yang salah.

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

Apakah mungkin untuk membatalkan atau mematikan ini dengan beberapa kode jQuery atau JavaScript, jadi saya tidak memiliki proses ini berkeliaran?

Jawaban:


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

clearTimeout(timer1)

101
window hanyalah nama namespace global, jadi itu tidak benar-benar diperlukan (baik untuk setTimeout atau clearTimeout).
Matthew Crumley

7
Karena parameter pertama untuk setTimeout adalah fungsi dan 'removeStatusIndicator ()' adalah fungsi, Anda dapat memperoleh kinerja (dan mengetik lebih sedikit) hanya dengan: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); Ini menghindari panggilan fungsi bersarang.
HarleyDave

5
dan window.clearTimeout(timer1)tidak akan bekerja di Node.js. Baik gunakan clearTimeout(timer1)atauglobal.clearTimeout(timer1)
CL22

2
@ user1944491 Tidak akan ada doa-ganda: perhatikan bahwa @HarleyDave menulis setTimeout(removeStatusIndicator, ...), yaitu fungsi removeStatusIndicatortidak dipanggil.
Frerich Raabe

3
Harap abaikan apa yang dikatakan @ user1944491 - salah. Fungsi yang diteruskan ke setTimeout tidak dipanggil dua kali. Chrome tidak mengubah perilakunya, lebih setTimeout( func(), 0 )tepatnya Anda mengacaukannya dengan memanggil fungsi alih-alihsetTimeout( func, 0 )
Sethi

2

Window.clearTimeout () harus melakukan apa yang ingin Anda capai.


6
Tolong jelaskan jawaban Anda dan berikan beberapa contoh. Sebuah jawaban yang baik akan selalu memiliki penjelasan tentang apa yang telah dilakukan dan mengapa itu dilakukan sedemikian rupa, tidak hanya untuk OP tetapi untuk pengunjung masa depan ke SO.
B001 ᛦ

4
Memberi +1 hanya karena komentar di atas benar-benar tidak relevan dan acak bagi saya. Jawabannya terlihat benar-benar baik, itu baru diposting kemudian, jadi ini lebih seperti "copy-paste" dari jawaban yang sudah disediakan.
vir us
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.