深入分析js的冒泡事件


Posted in Javascript onDecember 05, 2014

在javascript的dom操作做肯定会遇到js的冒泡事件,最常见的是div弹窗事件如图解

深入分析js的冒泡事件

当点击灰色部分是弹窗消失,点击黑色部分时没有效果。

通过下面一段代码来分析js的冒泡事件

html代码:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>js冒泡事件</title>

    <link rel="stylesheet" href="style.css">

</head>

<body>

    <div class="container">

        <h1>js冒泡事件分析</h1>

        <hr>

        <div class="box bg-gray">

            <button class="btn">

                Click me !

            </button>

        </div>

    </div>

    <script>

    var box=document.querySelector(".box"),

    btn=document.querySelector(".btn");

    box.onclick=function(event){

        alert("我是div");

    }

    btn.onclick=function(event){

        alert("我是button");

    }

    </script>

</body>

</html>

使用firefox浏览器的默认开发者工具的3d视图可以清晰的看出div层的先后顺序

深入分析js的冒泡事件

图解:

深入分析js的冒泡事件

当点击按钮时会弹出“我是button”再弹出“我是div”,因为先触发按钮事件之后触发下一层div点击事件,

事件的触发是先进先出原则。

图解:

深入分析js的冒泡事件

那么有些时候我们并不想多个事件的触发而导致冲突,所以event有stopPropagation();方法来阻止冒泡

还有一个event的方法也是比较常用的比如一个链接,点击链接时我不想跳转,则使用event.preventDefault();方法

实例代码如下

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>js冒泡事件</title>

    <link rel="stylesheet" href="style.css">

</head>

<body>

    <div class="container">

        <h1>js冒泡事件分析</h1>

        <hr>

        <div class="box bg-gray">

            <button class="btn">

                Click me !

            </button>

            <a href="http://www.liteng.org" id="link">我是链接</a>

        </div>

    </div>

    <script>

    var box=document.querySelector(".box"),

    btn=document.querySelector(".btn");

    box.onclick=function(event){

        alert("我是div");

    }

    btn.onclick=function(event){

        alert("我是button");

        event.stopPropagation();

    }

    document.getElementById('link').onclick=function(event){

        alert("我是link");

        event.preventDefault();

    }

    /*区分event.stopPropagation();和event.preventDefault();

      前者使用stopPropagation()方法阻止事件冒泡

      后者是阻止默认的行为比如阻止超链接

    */

    </script>

</body>

</html>

小伙伴们是否能够全面理解js的冒泡事件了呢,有疑问就给我留言吧

Javascript 相关文章推荐
面向对象的Javascript之三(封装和信息隐藏)
Jan 27 Javascript
jQuery获取样式中的背景颜色属性值/颜色值
Dec 17 Javascript
JS+CSS实现可拖动的弹出提示框
Feb 16 Javascript
微信小程序 LOL 英雄介绍开发实例
Sep 30 Javascript
jQuery通过ajax快速批量提交表单数据
Oct 25 Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 Javascript
简单的渐变轮播插件
Jan 12 Javascript
JS实现点击表头表格自动排序(含数字、字符串、日期)
Jan 22 Javascript
详解vue-cli之webpack3构建全面提速优化
Dec 25 Javascript
node.js实现简单的压缩/解压缩功能示例
Nov 05 Javascript
微信小程序报错: thirdScriptError的错误问题
Jun 19 Javascript
JS实现小米轮播图
Sep 21 Javascript
Javascript解析URL方法详解
Dec 05 #Javascript
jQuery不兼容input的change事件问题解决过程
Dec 05 #Javascript
Node.js中安全调用系统命令的方法(避免注入安全漏洞)
Dec 05 #Javascript
jQuery前端框架easyui使用Dialog时bug处理
Dec 05 #Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 #Javascript
Javascript 中创建自定义对象的方法汇总
Dec 04 #Javascript
dreamweaver 8实现Jquery自动提示
Dec 04 #Javascript
You might like
php异常处理技术,顶级异常处理器
2012/06/13 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
php生成随机颜色的方法
2014/11/13 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
Javascript的数组与字典用法与遍历对象的属性技巧
2012/11/07 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
jQuery的实例及必知重要的jQuery选择器详解
2016/05/20 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
微信小程序 网络请求(post请求,get请求)
2017/01/17 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
细说webpack6 Babel的使用详解
2019/09/26 Javascript
[06:07]DOTA2-DPC中国联赛3月5日Recap集锦
2021/03/11 DOTA
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
剖析Python的Twisted框架的核心特性
2016/05/25 Python
python PyTorch参数初始化和Finetune
2018/02/11 Python
基于Python Numpy的数组array和矩阵matrix详解
2018/04/04 Python
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
银行自荐信范文
2013/10/07 职场文书
财务工作个人求职的自我评价
2013/12/19 职场文书
公司成立感言
2014/01/11 职场文书
中国文明网签名寄语
2014/01/18 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
区域经理岗位职责
2015/02/02 职场文书
学校证明范文
2015/06/24 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
js之ajax文件上传
2021/05/13 Javascript
教你怎么用python selenium实现自动化测试
2021/05/27 Python
Python中的套接字编程是什么?
2021/06/21 Python
redis数据一致性的实现示例
2022/03/18 Redis
SpringBoot整合Minio文件存储
2022/04/03 Java/Android
如何Tomcat中使用ipv6地址
2022/05/06 Servers