ยกเลิก / ฆ่าหน้าต่าง setTimeout () ก่อนที่มันจะเกิดขึ้น


194

ฉันมีบางสถานที่ที่ฉันใช้บรรทัดด้านล่างเพื่อล้างสถานะตัวอย่างเช่น ฉันมีไม่กี่คนที่แฮงเอาท์เป็นเวลา 10 วินาทีขึ้นไปและหากผู้ใช้ได้รับการคลิกไปรอบ ๆ แอคชั่นสามารถเกิดขึ้นได้ในช่วงเวลาที่ไม่ถูกต้อง

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

เป็นไปได้ที่จะยกเลิกหรือฆ่าโดยใช้รหัส jQuery หรือ JavaScript ดังนั้นฉันจึงไม่มีกระบวนการนี้ห้อยอยู่

คำตอบ:


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

clearTimeout(timer1)

101
หน้าต่างเป็นเพียงชื่อของ namespace ส่วนกลางดังนั้นจึงไม่จำเป็นจริงๆ (สำหรับ setTimeout หรือ clearTimeout)
Matthew Crumley

7
เนื่องจากพารามิเตอร์แรกสำหรับ setTimeout เป็นฟังก์ชั่นและ 'removeStatusIndicator ()' เป็นฟังก์ชั่นคุณสามารถเพิ่มประสิทธิภาพ (และพิมพ์น้อยลง) โดยเพียงแค่: var timer1 = setTimeout (removeStatusIndicator, statusTimeout); นี่เป็นการหลีกเลี่ยงการเรียกฟังก์ชันที่ซ้อนกัน
HarleyDave

5
และwindow.clearTimeout(timer1)จะไม่ทำงานใน Node.js อาจใช้clearTimeout(timer1)หรือglobal.clearTimeout(timer1)
CL22

2
@ user1944491 จะไม่มีการเรียกซ้ำสองครั้ง: โปรดทราบว่า @HarleyDave wrote setTimeout(removeStatusIndicator, ...)นั่นremoveStatusIndicatorคือไม่ได้เรียกใช้ฟังก์ชัน
Raabe

3
โปรดละเว้นสิ่งที่ @ user1944491 กำลังพูด - มันผิด ฟังก์ชันที่ส่งผ่านไปยัง setTimeout ไม่ถูกเรียกสองครั้ง Chrome ไม่ได้เปลี่ยนพฤติกรรมของมันดูเหมือนว่าคุณจะเมามากขึ้นด้วยการเรียกใช้ฟังก์ชั่นsetTimeout( func(), 0 )มากกว่าsetTimeout( func, 0 )
Sethi

2

window.clearTimeout () ควรทำในสิ่งที่คุณพยายามจะทำ


6
โปรดอธิบายคำตอบของคุณและยกตัวอย่าง คำตอบที่ดีมักจะมีคำอธิบายของสิ่งที่ทำและทำไมมันก็ทำในลักษณะดังกล่าวไม่เพียง แต่สำหรับ OP แต่สำหรับผู้เข้าชมในอนาคตที่จะ SO
B001 ᛦ

4
+1 เพียงเพราะความคิดเห็นด้านบนดูเหมือนจะไม่เกี่ยวข้องและสุ่มให้ฉัน คำตอบนั้นดูดีมากมันเพิ่งโพสต์ในภายหลังดังนั้นจึงเป็นเหมือนคำว่า "copy-paste" ของคำตอบที่ให้ไปแล้ว
vir พวกเรา
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.