深入分析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 相关文章推荐
jquery控制listbox中项的移动并排序的实现代码
Sep 28 Javascript
JS字符串函数扩展代码
Sep 13 Javascript
JS隐藏参数post传值实例
Apr 18 Javascript
深入理解javascript变量声明
Nov 20 Javascript
ajax跨域调用webservice的实现代码
May 09 Javascript
jQuery图片轮播插件——前端开发必看
May 31 Javascript
require.js+vue开发微信上传图片组件
Oct 27 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
Jun 01 Javascript
Vue+Flask实现简单的登录验证跳转的示例代码
Jan 13 Javascript
JavaScript面向对象的程序设计(犯迷糊的小羊)
May 27 Javascript
详解vue组件中使用路由方法
Feb 12 Javascript
Vue全局loading及错误提示的思路与实现
Aug 09 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笔记之常用文件操作
2010/10/12 PHP
PHP面向对象教程之自定义类
2014/06/10 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
Laravel+jQuery实现AJAX分页效果
2016/09/14 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
2017/06/13 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
javascrpt绑定事件之匿名函数无法解除绑定问题
2012/12/06 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
浅析js设置控件的readonly与enabled属性问题
2013/12/25 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
对js eval()函数的一些见解
2016/08/15 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
如何利用JQuery实现从底部回到顶部的功能
2016/12/27 Javascript
深入理解Angular中的依赖注入
2017/06/26 Javascript
vue中实现滚动加载更多的示例
2017/11/08 Javascript
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
微信小程序引用iconfont图标的方法
2018/10/22 Javascript
微信小程序自定义多列选择器使用详解
2019/06/21 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
Python操作MySQL数据库9个实用实例
2015/12/11 Python
Python读取csv文件分隔符设置方法
2019/01/14 Python
python编写微信公众号首图思路详解
2019/12/13 Python
记一次pyinstaller打包pygame项目为exe的过程(带图片)
2020/03/02 Python
Keras 在fit_generator训练方式中加入图像random_crop操作
2020/07/03 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
Python 连接 MySQL 的几种方法
2020/09/09 Python
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
家长给幼儿园的表扬信
2014/01/09 职场文书
工商管理本科生求职信
2014/07/13 职场文书
2015年考研复习计划
2015/01/19 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server