深入分析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存取照片的具体实现方法
Jun 30 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
Nov 07 Javascript
javascript模拟实现C# String.format函数功能代码
Nov 25 Javascript
Jquery的each里用return true或false代替break或continue
May 21 Javascript
jQuery学习笔记之toArray()
Jun 09 Javascript
jQuery实现表格颜色交替显示的方法
Mar 09 Javascript
微信小程序 form组件详解
Oct 25 Javascript
Angular2自定义分页组件
Apr 19 Javascript
vue-router中scrollBehavior的巧妙用法
Jul 09 Javascript
javascript中的event loop事件循环详解
Dec 14 Javascript
微信小程序自定义带价格显示日历效果
Dec 29 Javascript
Vue v-for循环之@click点击事件获取元素示例
Nov 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+javascript液晶时钟
2006/10/09 PHP
php 模拟get_headers函数的代码示例
2013/04/27 PHP
php IP转换整形(ip2long)的详解
2013/06/06 PHP
浅析PHP页面局部刷新功能的实现小结
2013/06/21 PHP
PHP curl 或 file_get_contents 获取需要授权页面的方法
2017/05/05 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
jquery 跨域访问问题解决方法(笔记)
2011/06/08 Javascript
js自动闭合html标签(自动补全html标记)
2012/10/04 Javascript
关于jQuery参考实例 1.0 jQuery的哲学
2013/04/07 Javascript
动态获取复选框checkbox选中个数的jquery代码
2013/06/25 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
angular2系列之路由转场动画的示例代码
2017/11/09 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
在react中使用vuex的示例代码
2018/07/30 Javascript
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
2018/07/31 NodeJs
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Python greenlet实现原理和使用示例
2014/09/24 Python
Python访问MySQL封装的常用类实例
2014/11/11 Python
Python读写unicode文件的方法
2015/07/10 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
简单实现python聊天程序
2018/04/01 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
在Mac上删除自己安装的Python方法
2018/10/29 Python
python实现PolynomialFeatures多项式的方法
2021/01/06 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
美国一家运动专业鞋类零售商:Warehouse Shoe Sale(WSS)
2018/03/28 全球购物
美国林业供应商:Forestry Suppliers
2019/05/01 全球购物
艾滋病宣传标语
2014/06/25 职场文书
庆元旦主持词
2015/07/06 职场文书
婚礼家长致辞
2015/07/27 职场文书
周一问候语大全
2015/11/10 职场文书