简单解析js的事件冒泡及如何取消事件冒泡

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 简单解析js的事件冒泡1.什么是事件冒泡?以click点击事件为例。假如我们有一个多层结构标签。如下图,是4个div嵌套。每个div都有点击的监听事件,分别alert(“box4”),alert(“box3”),alert(“box2”),alert(“box1”)。当我们点击最里面的div时,点击事件开始传递。出现的效果是alert(“box4”)-alert(“box3”)-alert(“box2”)-alert(“box1”)。这就是事件冒泡阶段。效果如下:在这里插入图片描述HTML代码: <div class="box1"> <div clas

简单解析js的事件冒泡




1.什么是事件冒泡?


以click点击事件为例。假如我们有一个多层结构标签。如下图,是4个div嵌套。每个div都有点击的监听事件,分别alert(“box4”),alert(“box3”),alert(“box2”),alert(“box1”)。当我们点击最里面的div时,点击事件开始传递。出现的效果是alert(“box4”)-alert(“box3”)-alert(“box2”)-alert(“box1”)。这就是事件冒泡阶段。效果如下:


20200603020540355.gif

在这里插入图片描述


HTML代码:


<divclass="box1"><divclass="box2"><divclass="box3"><divclass="box4"></div></div></div></div>


CSS代码:


* {
            margin: 0;
            padding: 0;
        }
        .box1{
            width: 400px;
            height: 400px;
            background: red;
        }
        .box2{
            width: 300px;
            height: 300px;
            background: yellow;
        }
        .box3{
            width: 200px;
            height: 200px;
            background: skyblue;
        }
        .box4{
            width: 100px;
            height: 100px;
            background: green;
        }


JS代码:



var oBox1=document.getElementsByClassName("box1")[0];
    var oBox2=document.getElementsByClassName("box2")[0];
    var oBox3=document.getElementsByClassName("box3")[0];
    var oBox4=document.getElementsByClassName("box4")[0];
    // 事件冒泡  由里向外执行
    oBox1.onclick=function(ev){
        alert("box1");    
    }
    oBox2.onclick=function(ev){
        alert("box2");
    }
    oBox3.onclick=function(ev){
        alert("box3");
    }
    oBox4.onclick=function(ev){
        alert("box4");
    }


2.如何取消事件冒泡


var oBox1=document.getElementsByClassName("box1")[0];
    var oBox2=document.getElementsByClassName("box2")[0];
    var oBox3=document.getElementsByClassName("box3")[0];
    var oBox4=document.getElementsByClassName("box4")[0];
    // 事件冒泡  由里向外执行
    oBox1.onclick=function(ev){
        // console.log(ev);
        // console.log("box1");
        alert("box1");    
        if(ev&&ev.stopPropagation){
            ev.stopPropagation();//除 IE外的浏览器
        }else{
            ev.cancelBubble=true;//针对IE
        }
    }
    oBox2.onclick=function(ev){
        // console.log("box2");
        alert("box2");
        if(ev&&ev.stopPropagation){
            ev.stopPropagation();//除 IE外的浏览器
        }else{
            ev.cancelBubble=true;//针对IE
        }
    }
    oBox3.onclick=function(ev){
        // console.log("box3");
        alert("box3");
        if(ev&&ev.stopPropagation){
            ev.stopPropagation();//除 IE外的浏览器
        }else{
            // ev.cancelBubble=true;//针对IE
        }
    }
    oBox4.onclick=function(ev){
        console.log("box4");
        console.log(ev);
        // alert("box4");
        if(ev&&ev.stopPropagation){
            ev.stopPropagation();//除 IE外的浏览器
        }else{
            ev.cancelBubble=true;//针对IE
        }
    }


视频讲解链接:
https://www.bilibili.com/video/BV1dv411z7mY/

相关文章
|
27天前
|
JavaScript 前端开发 Go
CSS 与 JS 对 DOM 解析和渲染的影响
【10月更文挑战第16天】CSS 和 JS 会在一定程度上影响 DOM 解析和渲染,了解它们之间的相互作用以及采取适当的优化措施是非常重要的。通过合理的布局和加载策略,可以提高网页的性能和用户体验,确保页面能够快速、流畅地呈现给用户。在实际开发中,要根据具体情况进行权衡和调整,以达到最佳的效果。
|
27天前
|
JavaScript 前端开发 UED
JS DOM 事件流与事件冒泡
【10月更文挑战第16天】理解 DOM 事件流和事件冒泡是掌握 JavaScript 事件处理的关键。通过合理利用事件冒泡,可以实现更高效、灵活的事件处理机制,提升用户体验和开发效率。在实际开发中,要根据具体情况灵活运用这些概念,以达到最佳的效果。
|
23天前
|
存储 前端开发 JavaScript
JavaScript垃圾回收机制深度解析
【10月更文挑战第21】JavaScript垃圾回收机制深度解析
97 59
|
1月前
|
JavaScript 前端开发 索引
JavaScript ES6及后续版本:新增的常用特性与亮点解析
JavaScript ES6及后续版本:新增的常用特性与亮点解析
27 4
|
15天前
|
前端开发 JavaScript
JavaScript新纪元:ES6+特性深度解析与实战应用
【10月更文挑战第29天】本文深入解析ES6+的核心特性,包括箭头函数、模板字符串、解构赋值、Promise、模块化和类等,结合实战应用,展示如何利用这些新特性编写更加高效和优雅的代码。
32 0
|
1月前
|
JavaScript 前端开发 开发者
原型链深入解析:JavaScript中的核心机制
【10月更文挑战第13天】原型链深入解析:JavaScript中的核心机制
29 0
|
1月前
|
JavaScript API
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
深入解析JS中的visibilitychange事件:监听浏览器标签间切换的利器
94 0
|
1月前
|
JavaScript
深入解析:JS与Vue中事件委托(事件代理)的高效实现方法
深入解析:JS与Vue中事件委托(事件代理)的高效实现方法
41 0
|
1月前
|
存储 JavaScript 前端开发
Vue.js项目中全面解析定义全局变量的常用方法与技巧
Vue.js项目中全面解析定义全局变量的常用方法与技巧
41 0
|
6月前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
49 2

推荐镜像

更多