Dalam pertemuan pengaturcaraan baru-baru ini, isu pelik telah dihadapi. Satu
Kebingungan dengan ketidakteraturan, penyelesaian percubaan telah dilaksanakan menggunakan setTimeout(wrapFn, 0) dalam fungsi pembungkus. Ini nampaknya mengurangkan isu itu, mencetuskan rasa ingin tahu tentang sebab asas di sebalik keberkesanannya.
Memeriksa kod mendedahkan keadaan perlumbaan antara pemulaan penyemak imbas bagi
Pelaksanaan satu benang JavaScript dan penggunaan dikongsinya dengan pemaparan halaman menjelaskan isu ini. Menjalankan JavaScript menggantung kemas kini DOM buat sementara waktu, menyebabkan kelewatan dalam keupayaan penyemak imbas untuk memulakan senarai lungsur turun.
Penyelesaian menggunakan setTimeout() dengan parameter kelewatan sifar membenarkan fungsi panggil balik dilaksanakan secara tidak segerak, memperkenalkan kelewatan singkat kira-kira 10 milisaat. Ini memberikan masa yang mencukupi untuk penyemak imbas melengkapkan permulaannya, menyelesaikan isu pemilihan.
Walaupun punca sebenar masalah dalam kes khusus ini masih tidak pasti, ada kemungkinan ia berpunca daripada keanehan dalam Internet Explorer atau pepijat dalam pangkalan kod. Penggunaan setTimeout(fn, 0) berfungsi sebagai penyelesaian pragmatik dengan memperkenalkan kelewatan terkawal, membolehkan penyemak imbas mengejar dan menangani keadaan perlumbaan.
Atas ialah kandungan terperinci Mengapakah `setTimeout(fn, 0)` Membetulkan Isu Nilai Elemen Pilih dalam Internet Explorer 6?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!