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?

Toran Billups
sumber

Jawaban:

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

clearTimeout(timer1)
Diodeus - James MacFarlane
sumber
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.

Florin Toader
sumber
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