17
ทำไมบางครั้ง setTimeout (fn, 0) จึงมีประโยชน์
ฉันเพิ่งพบข้อผิดพลาดค่อนข้างน่ารังเกียจรหัสนั้นโหลด<select>แบบไดนามิกผ่านทาง JavaScript โหลดแบบไดนามิกนี้<select>มีค่าที่เลือกไว้ล่วงหน้า ใน IE6 เราแล้วมีรหัสในการแก้ไขปัญหาที่เลือก<option>เพราะบางครั้ง<select>'s selectedIndexค่าจะออกจากซิงค์กับที่เลือก<option>' s indexคุณลักษณะดังต่อไปนี้: field.selectedIndex = element.index; อย่างไรก็ตามรหัสนี้ไม่ทำงาน แม้ว่าจะselectedIndexมีการตั้งค่าฟิลด์อย่างถูกต้อง แต่ดัชนีที่ไม่ถูกต้องก็จะถูกเลือก อย่างไรก็ตามถ้าฉันติดalert()คำสั่งในเวลาที่เหมาะสมตัวเลือกที่ถูกต้องจะถูกเลือก การคิดว่านี่อาจเป็นปัญหาเรื่องเวลาฉันลองสุ่มเลือกที่ฉันเคยเห็นในรหัสมาก่อน: var wrapFn = (function() { var myField = field; var myElement = element; return function() { myField.selectedIndex = myElement.index; } })(); setTimeout(wrapFn, 0); และสิ่งนี้ได้ผล! ฉันมีวิธีแก้ไขปัญหาแล้ว แต่ฉันไม่สบายใจที่ไม่รู้ว่าทำไมสิ่งนี้ถึงแก้ไขปัญหาของฉันได้ ใครบ้างมีคำอธิบายอย่างเป็นทางการ? ฉันหลีกเลี่ยงปัญหาเบราว์เซอร์ใดโดยเรียกใช้ฟังก์ชัน "ภายหลัง" โดยใช้setTimeout()?
872
javascript
dom
event-loop