javascript - Bagaimanakah penyemak imbas mengetahui bahawa peristiwa telah berlaku?
滿天的星座
滿天的星座 2017-06-14 10:51:11
0
6
741

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?

滿天的星座
滿天的星座

membalas semua(6)
给我你的怀抱

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.

大家讲道理

Jika anda bercakap tentang bagaimana untuk mendapatkannya. Saya rasa jawapannya terletak pada JavaScript Event Loop

Pautan: https://developer.mozilla.org...

仅有的幸福

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?

世界只因有你

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.

女神的闺蜜爱上我

Klik untuk melaksanakandisableClickHandler, menghalang acara daripada merebak, jadi...

黄舟

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan