深入分析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 自定义事件初探
Aug 21 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
Aug 11 Javascript
javascript温习的一些笔记 基础常用知识小结
Jun 22 Javascript
地址栏传递中文参数乱码在js里用escape转码
Aug 28 Javascript
js判断客户端是iOS还是Android等移动终端的方法
Dec 11 Javascript
js关于精确计算和数值格式化以及直接引js文件
Jan 28 Javascript
Javascript判断文件是否存在(客户端/服务器端)
Sep 16 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 Javascript
vuejs 单文件组件.vue 文件的使用
Jul 28 Javascript
vue配置多页面的实现方法
May 22 Javascript
layer弹出的iframe层在执行完毕后关闭当前弹出层的方法
Aug 17 Javascript
JQuery实现简单的复选框树形结构图示例【附源码下载】
Jul 16 jQuery
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面向对象之反射功能与用法分析
2017/03/29 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
初始Nodejs
2014/11/08 NodeJs
兼容主流浏览器的JS复制内容到剪贴板
2014/12/12 Javascript
Jquery树插件zTree用法入门教程
2015/02/17 Javascript
简介JavaScript中substring()方法的使用
2015/06/06 Javascript
Move.js入门
2017/02/08 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
JS实现移动端整屏滑动的实例代码
2017/11/10 Javascript
JavaScript模板引擎实现原理实例详解
2018/12/14 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
Openlayers+EasyUI Tree动态实现图层控制
2020/09/28 Javascript
html中创建并调用vue组件的几种方法汇总
2020/11/17 Javascript
Python continue语句用法实例
2014/03/11 Python
通过源码分析Python中的切片赋值
2017/05/08 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
Python if语句知识点用法总结
2018/06/10 Python
Django自定义用户登录认证示例代码
2019/06/30 Python
django如何自己创建一个中间件
2019/07/24 Python
解决pytorch报错:AssertionError: Invalid device id的问题
2020/01/10 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
详解移动端Html5页面中1px边框的几种解决方法
2018/07/24 HTML / CSS
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
Vrbo西班牙:预订您的度假公寓(公寓、乡村房屋…)
2020/04/27 全球购物
联谊活动策划书
2014/01/26 职场文书
英语系毕业生求职信
2014/07/13 职场文书
青春雷锋观后感
2015/06/10 职场文书
初三英语教学反思
2016/02/15 职场文书