Rumah > Soal Jawab > teks badan
Baru-baru ini, saya sedang mengkaji dengan mendalam isu yang berkaitan dengan penangkapan dan menggelegak peristiwa:
Saya mempunyai pemahaman ini, saya tidak tahu sama ada ia betul, anda boleh lihat.
Mekanisme penyebaran acara dibahagikan kepada tiga peringkat: peringkat tangkapan, peringkat mencapai sasaran dan peringkat menggelegak. Saya fikir tujuan mekanisme penyebaran ini adalah untuk memantau sama ada sesuatu peristiwa itu berlaku, jenis peristiwa itu berlaku dan di mana peristiwa itu berlaku. Apa yang dipanggil tangkapan peristiwa bermakna penyemak imbas sedang mencari sama ada sesuatu peristiwa telah berlaku Bagi masa pemprosesan selepas peristiwa itu berlaku, ia dicapai dengan mendaftarkan fungsi pemprosesan acara dan parameter terakhir addEventListener().
Tetapi jika saya mengikuti idea ini, saya akan mengalami masalah sedemikian.
Sebagai contoh, saya mempunyai sekeping kod seperti ini
<p>
<a id="btn" href="http://www.baidu.com/">
button
</a>
</p>
<script>
var btn=document.getElementById('btn');
var disableClickHandler = function(event){
console.log('1');
event.preventDefault();
event.stopPropagation();
};
document.removeEventListener('click',disableClickHandler,true);
btn.onclick = function () {
console.log('success');
}
</script>
Saya menggunakan kaedah tangkapan untuk mengendalikan acara, dan menghalang acara daripada terus disebarkan dalam fungsi pengendalian acara. Ini kelihatan semula jadi, tetapi soalan saya ialah, jika acara itu telah berhenti disebarkan, bagaimanakah penyemak imbas tahu di mana peristiwa itu berlaku? Bagaimanakah ia mengetahui bahawa sesuatu peristiwa telah berlaku? Jika ia tidak mengetahui bahawa peristiwa telah berlaku, bagaimanakah ia boleh melaksanakan pengendali acara yang sepadan?
给我你的怀抱2017-06-14 10:53:11
Konflik anda disebabkan oleh pemahaman yang salah tentang fasa tangkapan. Jangan risau dengan namanya. Menangkap dan menggelegak berada pada tahap yang sama. Jadi gangguan peristiwa terganggu semasa proses penyebaran, bukan sebelum penyebaran.
大家讲道理2017-06-14 10:53:11
Jika anda bercakap tentang bagaimana untuk mendapatkannya. Saya rasa jawapannya terletak pada JavaScript Event Loop
Pautan: https://developer.mozilla.org...
仅有的幸福2017-06-14 10:53:11
Kod tersebut dilaksanakan oleh penyemak imbas untuk anda, acara itu dikesan oleh penyemak imbas, dan kemudian penyemak imbas membantu anda melaksanakan acara yang anda tentukan.
Jadi anda bertanya bagaimana penyemak imbas tahu?
世界只因有你2017-06-14 10:53:11
Ini kerana JavaScript ialah bahasa arahan. Iaitu, setiap pernyataan JavaScript yang anda tulis ialah arahan untuk memberitahu penyemak imbas untuk melakukan sesuatu Contohnya, document.getElementById() yang paling mudah sebenarnya memberitahu penyemak imbas untuk mendapatkan DOM yang berkaitan, bukannya JavaScript itu sendiri. Begitu juga dengan pengendalian acara.
女神的闺蜜爱上我2017-06-14 10:53:11
Klik untuk melaksanakandisableClickHandler
, menghalang acara daripada merebak, jadi...
黄舟2017-06-14 10:53:11
Jika acara telah berhenti merebak, bagaimana pelayar tahu di mana peristiwa itu berlaku?
Ia tidak mahu tahu.
Bagaimana ia tahu bahawa sesuatu peristiwa telah berlaku?
Itu pun tak tahu.
Jika ia tidak mengetahui bahawa sesuatu peristiwa telah berlaku, bagaimanakah ia boleh melaksanakan pengendali acara yang sepadan?
Malas katanya.