深入分析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 API学Jquery之一 选择器
Apr 07 Javascript
关于js中window.location.href,location.href,parent.location.href,top.location.href的用法与区别
Oct 18 Javascript
Pro JavaScript Techniques学习笔记
Dec 28 Javascript
jquery zTree异步加载简单实例分享
Feb 05 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
Jun 29 Javascript
js 实现菜单上下显示附效果图
Nov 21 Javascript
AngularJS内建服务$location及其功能详解
Jul 01 Javascript
Angular弹出模态框的两种方式
Oct 19 Javascript
webpack4.x开发环境配置详解
Aug 04 Javascript
JavaScript惰性载入函数实例分析
Mar 27 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
JS如何监听div的resize事件详解
Dec 03 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将数据库导出成excel的方法
2010/05/07 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
初识通用数据库操作类――前端easyui-datagrid,form(php)
2015/07/31 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
php简单生成一组与多组随机字符串的方法
2017/05/09 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
Javascript hasOwnProperty 方法 &amp; in 关键字
2008/11/26 Javascript
一个JQuery操作Table的代码分享
2012/03/30 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
尝试动手制作javascript放大镜效果
2015/12/25 Javascript
浅谈Cookie的生命周期问题
2016/08/02 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
jQuery实现的自定义弹出层效果实例详解
2016/09/04 Javascript
微信开发 消息推送实现代码
2016/10/21 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
jQuery完成表单验证的实例代码(纯代码)
2017/09/30 jQuery
浅谈webpack+react多页面开发终极架构
2018/11/11 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
python生成指定尺寸缩略图的示例
2014/05/07 Python
python求众数问题实例
2014/09/26 Python
Python类方法__init__和__del__构造、析构过程分析
2015/03/06 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Python pip使用超时问题解决方案
2020/08/03 Python
python与c语言的语法有哪些不一样的
2020/09/13 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
Daniel Wellington官方海外旗舰店:丹尼尔惠灵顿DW手表
2018/02/22 全球购物
Yahoo-PHP面试题2
2014/12/06 面试题
2015年银行柜员工作总结报告
2015/04/01 职场文书
不同意离婚代理词
2015/05/23 职场文书
军事博物馆观后感
2015/06/05 职场文书
感恩老师主题班会
2015/08/12 职场文书
java Nio使用NioSocket客户端与服务端交互实现方式
2021/06/15 Java/Android