深入分析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 相关文章推荐
js中关于String对象的replace使用详解
May 24 Javascript
改变状态栏文字的js代码
Jun 13 Javascript
jQuery中on()方法用法实例详解
Feb 06 Javascript
angularJS中router的使用指南
Feb 09 Javascript
jQuery插件Validate实现自定义校验结果样式
Jan 18 Javascript
Vuejs第十篇之vuejs父子组件通信
Sep 06 Javascript
详解vue组件化开发-vuex状态管理库
Apr 10 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
js捆绑TypeScript声明文件的方法教程
Apr 13 Javascript
详解通过源码解析Node.js中cluster模块的主要功能实现
May 16 Javascript
vue init webpack 建vue项目报错的解决方法
Sep 29 Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php mysql数据库操作类
2008/06/04 PHP
php笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
使用Smarty 获取当前日期时间和格式化日期时间的方法详解
2013/06/18 PHP
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
JQuery live函数
2010/12/24 Javascript
js 页面关闭前的出现提示的实现代码
2011/05/25 Javascript
从数据结构分析看:用for each...in 比 for...in 要快些
2013/04/17 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
js拖动div 当鼠标移动时整个div也相应的移动
2013/11/21 Javascript
javascript 密码框防止用户粘贴和复制的实现代码
2014/02/17 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
javascript实现uploadify上传格式以及个数限制
2015/11/23 Javascript
Javascript之String对象详解
2016/06/08 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
es6 字符串String的扩展(实例讲解)
2017/08/03 Javascript
详解JS函数stack size计算方法
2018/06/18 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
vue开发中遇到的问题总结
2020/04/07 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
python实现按行切分文本文件的方法
2016/04/18 Python
python dict 字典 以及 赋值 引用的一些实例(详解)
2017/01/20 Python
python实现最长公共子序列
2018/05/22 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
python Cartopy的基础使用详解
2020/11/01 Python
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang