深入分析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 相关文章推荐
css配合jquery美化 select
Nov 29 Javascript
JS与C#编码解码
Dec 03 Javascript
js仿土豆网带缩略图的焦点图片切换效果实现方法
Feb 23 Javascript
js图片上传前预览功能(兼容所有浏览器)
Aug 24 Javascript
谈谈JS中常遇到的浏览器兼容问题和解决方法
Dec 17 Javascript
Jquery实时监听input value的实例
Jan 26 Javascript
Vue中添加过渡效果的方法
Mar 16 Javascript
vue监听对象及对象属性问题
Aug 20 Javascript
详解Node.js异步处理的各种写法
Jun 09 Javascript
简单了解TypeScript中如何继承 Error 类
Jun 21 Javascript
layui 地区三级联动 form select 渲染的实例
Sep 27 Javascript
8个JS的reduce使用实例和reduce操作方式
Oct 05 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
使用Apache的rewrite技术
2006/06/22 PHP
PHP反转字符串函数strrev()函数的用法
2012/02/04 PHP
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
php实现微信小程序授权登录功能(实现流程)
2019/11/13 PHP
ext实现完整的登录代码
2008/08/08 Javascript
一个收集图片的bookmarlet(js 刷新页面中的图片)
2010/05/27 Javascript
理解Javascript_10_对象模型
2010/10/16 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
限制textbox或textarea输入字符长度的JS代码
2013/10/16 Javascript
jquery动态添加元素事件失效问题解决方法
2014/05/23 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
vue路由懒加载的实现方法
2018/03/12 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
你不知道的Vue技巧之--开发一个可以通过方法调用的组件(推荐)
2019/04/15 Javascript
基于Vue.js+Nuxt开发自定义弹出层组件
2020/10/09 Javascript
微信小程序实现底部弹出框
2020/11/18 Javascript
python中ConfigParse模块的用法
2014/09/29 Python
Django接收自定义http header过程详解
2019/08/23 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Python操作Jira库常用方法解析
2020/04/10 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
python获取linux系统信息的三种方法
2020/10/14 Python
Nisbets爱尔兰:英国最大的厨房和餐饮设备供应商
2019/01/26 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
什么是属性访问器
2015/10/26 面试题
介绍一下linux文件系统分配策略
2012/11/17 面试题
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
毕业生自我鉴定范文
2013/11/08 职场文书
小学教师见习总结
2015/06/23 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
攻略丨滑雪究竟该选哪款对讲机?
2022/02/18 无线电
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL