Adakah peristiwa itu perlu dirakam dahulu atau dibuih dahulu? Memecahkan misteri pesanan pencetus acara
Pemprosesan acara adalah bahagian yang sangat penting dalam pembangunan web, dan susunan pencetus acara adalah salah satu misteri. Dalam HTML, acara biasanya disebarkan dengan "menangkap" atau "bergelembung". Mana yang perlu ditangkap dahulu atau dibuih dahulu? Ini adalah soalan yang sangat mengelirukan.
Sebelum menjawab soalan ini, mari kita fahami mekanisme "tangkap" dan "gelembung" peristiwa. Tangkapan peristiwa merujuk kepada penghantaran peristiwa lapisan demi lapisan dari elemen atas ke nod sasaran, manakala acara menggelegak merujuk kepada penghantaran peristiwa lapisan demi lapisan dari nod sasaran ke elemen atas. Kedua-dua kaedah penyebaran memainkan peranan penting dalam pemprosesan peristiwa.
Dalam pelayar awal, pesanan penyebaran acara dipelopori oleh Netscape. Mereka percaya bahawa susunan penyebaran peristiwa hendaklah daripada unsur paling luar kepada unsur dalam, dan kemudian dari unsur dalam kepada unsur luar. Oleh itu, penyemak imbas Netscape mentakrifkan urutan penyebaran peristiwa sebagai tangkapan peristiwa dan peristiwa menggelegak.
Walau bagaimanapun, dengan populariti Internet, Microsoft melancarkan pelayar IEnya sendiri dan menggunakan urutan penyebaran acara yang berbeza daripada Netscape. Mereka percaya bahawa penyebaran peristiwa harus bermula dari unsur paling dalam ke unsur luar, dan kemudian merambat dari unsur luar ke unsur dalam.
Untuk menyelesaikan masalah ketidakserasian bersama ini, W3C telah membangunkan piawaian bersatu. Menurut piawaian W3C, susunan penyebaran acara hendaklah menangkap dahulu dan kemudian menggelegak. Ini ialah susunan penyebaran yang kini diikuti oleh semua penyemak imbas moden.
Secara khusus, apabila peristiwa berlaku pada elemen, penyemak imbas akan melakukan fasa tangkapan acara terlebih dahulu. Dalam fasa tangkapan peristiwa, penyemak imbas menyebarkan peristiwa daripada elemen paling luar kepada elemen sasaran. Apabila acara merambat ke elemen sasaran, ia memasuki fasa sasaran. Dalam fasa sasaran, penyemak imbas melaksanakan pengendali acara yang terikat pada elemen sasaran. Akhir sekali, acara memasuki peringkat menggelegak, dan penyemak imbas akan menyebarkan acara daripada elemen sasaran ke elemen luar sehingga ia mencapai elemen paling luar.
Untuk lebih memahami urutan penyebaran acara, kami boleh menunjukkannya dengan contoh mudah. Katakan kita mempunyai dokumen HTML yang mengandungi tiga elemen bersarang:
<div id="outer"> <div id="inner"> <button id="button">Click me</button> </div> </div>
Kami mengikat fungsi pengendali acara pada setiap elemen, yang dilaksanakan dalam fasa penangkapan acara dan fasa menggelegak. Kita boleh mencapai ini melalui kod berikut:
var outer = document.getElementById('outer'); var inner = document.getElementById('inner'); var button = document.getElementById('button'); outer.addEventListener('click', function() { console.log('Outer capture'); }, true); inner.addEventListener('click', function() { console.log('Inner capture'); }, true); button.addEventListener('click', function() { console.log('Button capture'); }, true); outer.addEventListener('click', function() { console.log('Outer bubble'); }, false); inner.addEventListener('click', function() { console.log('Inner bubble'); }, false); button.addEventListener('click', function() { console.log('Button bubble'); }, false);
Apabila kita mengklik butang, hasil keluaran konsol ialah:
Outer capture Inner capture Button capture Button bubble Inner bubble Outer bubble
Daripada keputusan, kita dapat melihat dengan jelas susunan penyebaran acara. Mula-mula, penyemak imbas akan melaksanakan fungsi pemprosesan acara bagi fasa tangkapan (Tangkapan Luar, Tangkapan Dalam dan Tangkapan Butang) mengikut urutan dari luar ke dalam. Seterusnya, penyemak imbas akan melaksanakan fungsi pemprosesan acara fasa menggelegak (Button bubble, Inner bubble dan Outer bubble) mengikut urutan dari dalam ke luar.
Melalui contoh ini, kita boleh menyimpulkan bahawa dalam penyemak imbas moden, urutan penyebaran peristiwa adalah untuk menangkap dahulu dan kemudian gelembung. Ini diberi mandat oleh piawaian yang ditetapkan oleh W3C.
Dalam proses pembangunan sebenar, kami biasanya menggunakan mekanisme menggelegak acara untuk mengendalikan acara. Kerana mekanisme menggelegak acara boleh melaksanakan delegasi acara dengan mudah, mengurangkan bilangan fungsi pemprosesan acara dan meningkatkan prestasi. Mekanisme penangkapan peristiwa agak jarang digunakan dan hanya digunakan dalam beberapa keadaan khas.
Ringkasnya, susunan penyebaran peristiwa adalah untuk menangkap dahulu dan kemudian gelembung. Dengan memahami mekanisme penyebaran peristiwa, kami boleh mengendalikan acara dengan lebih baik dan meningkatkan pengalaman pengguna halaman web.
Atas ialah kandungan terperinci Fahami mekanisme penyebaran peristiwa: tangkapan dan analisis pesanan gelembung. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!