Semalam apabila saya mengubah suai halaman EPG pada set-top box, saya menghadapi masalah kecil. Apabila pengguna membeli permainan, kotak dialog pengesahan pembelian perlu muncul. Fokus lalai kotak dialog mesti kekal pada butang "Batal". Keperluan yang sangat mudah boleh dicapai menggunakan kaedah fokus() JavaScript. Contoh kod mudah adalah seperti berikut:
document.getElementById("cancel").focus()
Tetapi yang menyedihkan ialah kotak set-top itu benar-benar lubang besar. Memandangkan ia perlu serasi dengan semua model kotak atas set sedia ada, 8 kotak atas set perlu disesuaikan. Kemudian sesuatu yang tidak kena! Kotak set atas ZTE B600 tidak boleh menetapkan fokus kepada butang batal sama sekali. Berikut ialah penyelesaian saya:
Mula-mula sahkan sama ada kotak atas set menyokong kaedah getElementById() dan sama ada elemen dengan ID "batal" telah berjaya diperoleh: kaedah ujian adalah sangat mudah, cuma tulis
test
Akhirnya, "cuba...tangkap(e)..." digunakan untuk menangkap sebab mengapa "fokus()" gagaltry(){ <span style="white-space:pre"> </span>document.getElementById("cancel").focus() }catch(e){ <span style="white-space:pre"> </span>alert(e.name + ": " + e.what()); }
Tetapi ia pelik! Keputusan dua langkah di atas menunjukkan bahawa kotak set atas menyokong focus() dan getElementById(), tetapi fokus tidak boleh ditetapkan pada kotak dialog pop timbul.
Selepas berhempas-pulas selama lebih sejam, akhirnya BOSS besar itu muncul dan menyelesaikan masalah dengan hanya satu ayat! Anda boleh memanggil flur() secara aktif untuk membatalkan fokus asal!
document.getElementById("purchase").flur()
Kemudian masalah selesai. Saya perlu menghargainya! Dalam proses menyelesaikan masalah ini, idea saya sebenarnya agak betul, tetapi pengetahuan saya jelas tidak mencukupi. Jurang antara pengaturcara biasa dan pengaturcara kanan bukan sahaja dari segi idea untuk menyelesaikan masalah, tetapi juga dalam pengalaman dan pengetahuan!