zoukankan      html  css  js  c++  java
  • JavaScript捕获和冒泡探讨

     <div id="div">
         <input type="button" value="banana" id="banana" />
    </div> 

    在此页面中我们添加如下的代码:

    var btn = document.getElementById('banana');
            var div = document.getElementById('div');
    
            btn.addEventListener('click', function () {
                console.log('capture', 'btn');
            }, true);
            btn.addEventListener('click', function () {
                console.log('bubble', 'btn');
            }, false);
           
            div.addEventListener('click', function () {
                console.log('capture', 'div');
            }, true);
            div.addEventListener('click', function () {
                console.log('bubble', 'div');
            }, false);

    给button和div我们都是先绑定的捕获事件,此时运行的结果如下:

    capture div
    capture btn
    bubble btn
    bubble div

    可以看出是先运行的 捕获div - > 捕获 btn - > 冒泡 btn -> 冒泡 div.

    我们改改事件绑定的先后顺序,代码如下:

    var btn = document.getElementById('banana');
            var div = document.getElementById('div');
         
            btn.addEventListener('click', function () {
                console.log('bubble', 'btn');
            }, false);
            btn.addEventListener('click', function () {
                console.log('capture', 'btn');
            }, true);
           
           
            div.addEventListener('click', function () {
                console.log('bubble', 'div');
            }, false);
            div.addEventListener('click', function () {
                console.log('capture', 'div');
            }, true);

    再看运行的结果:

    capture div
    bubble btn
    capture btn
    bubble div

    此时结果是 捕获 div -> 冒泡 btn -> 捕获 btn -> 冒泡 div .

    猜测结论: 在最后一个捕获元素中,冒泡和捕获的事件执行的先后顺序与事件绑定的先后顺序有关,谁先绑定就优先执行谁。

    我们再改改页面代码:

     <div id="div">
                <div id="div1">
                    <input type="button" value="banana" id="banana" />
                </div>
            </div> 

    改改绑定事件的代码:

    var btn = document.getElementById('banana');
            var div = document.getElementById('div');
            var div1 = document.getElementById('div1');
         
            btn.addEventListener('click', function () {
                console.log('bubble', 'btn');
            }, false);
            btn.addEventListener('click', function () {
                console.log('capture', 'btn');
            }, true);
           
           
            div.addEventListener('click', function () {
                console.log('bubble', 'div');
            }, false);
            div.addEventListener('click', function () {
                console.log('capture', 'div');
            }, true);
            
    
            div1.addEventListener('click', function () {
                console.log('bubble', 'div1');
            }, false);
            div1.addEventListener('click', function () {
                console.log('capture', 'div1');
            }, true);

    点击button执行的结果:

    capture div
     capture div1
    bubble btn
    capture btn
    bubble div1
    bubble div

    此时结果是 :  捕获 div - > 捕获div1  - > 冒泡 btn -> 捕获 btn -> 冒泡 ->div1 -> 冒泡 div.

    其它的元素都是按照先捕获后冒泡的顺序在执行,只有最后一个捕获元素中,冒泡和捕获的事件执行的先后顺序与事件绑定的先后顺序有关,谁先绑定就优先执行谁。

  • 相关阅读:
    2019-2020-1 20191312《信息安全专业导论》第十二周学习总结
    GPG
    2019-2020-1 20191312《信息安全专业导论》第十一周学习总结
    wireshark
    ssh
    Nmap
    2019-2020-1 《python程序设计》20192428魏来 综合实践报告
    20192428 魏来 2019-2020《Python程序设计》 实验三 报告
    20192428 实验二《Python程序设计》实验报告
    20192428 实验一《Python程序设计》实验报告
  • 原文地址:https://www.cnblogs.com/huaan011/p/11867815.html
Copyright © 2011-2022 走看看