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.

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

  • 相关阅读:
    微信小程序真机预览跟本地不同的问题。原文地址:https://blog.csdn.net/qq_27187991/article/details/69664247/
    java 获取目标时间到当前时间中间的月份和每月最大时间
    关于事物与性能的测试
    两步搞定一台电脑同时开启多个tomcat
    一个java新手配置IIS服务器的血泪史
    16、指数加权平均算法介绍及偏差修正
    15、优化算法之Mini-batch 梯度下降法
    14、改善深层神经网络之梯度检验
    13、改善深层神经网路之权重初始化方法
    12、改善深层神经网络之梯度消失与梯度爆炸及其具体解决方案
  • 原文地址:https://www.cnblogs.com/huaan011/p/11867815.html
Copyright © 2011-2022 走看看