JavaScript捕捉事件和阻止冒泡事件实例分析


Posted in Javascript onAugust 03, 2018

本文实例讲述了JavaScript捕捉事件和阻止冒泡事件。分享给大家供大家参考,具体如下:

今日,项目程序出现异常,后发现跟冒泡事件有关,利用此机会探索一下利用Javascript捕获和冒泡事件。

一、要探究捕获和冒泡事件,首先要知道什么是事件的捕获和冒泡,所以呢,先从概念入手;

事件的冒泡:在一个对象上触发某类事件(比如单击onclick事件),如果此对象定义了此事件的处理程序,那么此事件就会调用这个处理程序,如果没有定义此事件处理程序或者事件返回true,那么这个事件会向这个对象的父级对象传播,从里到外,直至它被处理(父级对象所有同类事件都将被激活),或者它到达了对象层次的最顶层,即document对象(有些浏览器是window)。

其实事件冒泡是一个从后代节点向祖先节点冒泡的过程,而捕获是从祖先节点到后节点的过程。

我为了方便理解,则用先捕获,后冒泡,捕获从上到下,冒泡从下到上来记忆。我记得从哪儿看到的,有人把捕获比喻为石头沉入海底,而把冒泡比喻为气泡冒出水面。当然了,捕获的深度取决于你的DOM布局,海底就有点深了哈,^_^

注意:IE6、IE7、IE8只支持冒泡流,不支持捕获流。

二、为什么要阻止冒泡事件

也许会有人问:为什么要阻止冒泡事件呢?阻止冒泡事件有什么用处呢?

下面我们就来说下为什么要阻止冒泡事件:

先举个例子吧,如下代码:

<html>
  <div id='div_1' onclick="alert('I'm First!')">
     <div id='div_2' onclick="alert('I'm Second!')">
         <a id="alink" onclick="alert('I'm Third!')" href="http://www.baidu.com" rel="external nofollow" >Click Here</a>
     </div>
  </div>
</html>

从上面的代码可以看出,div_1是div_2的容器,而div_2是a的容器,总共三层。

我们运行这个实例,点击Click Here会发现,分别弹出了三个alert提示框,而且顺序为I'm Third!I'm Second!I'm First!,这就符合我们上面提到的冒泡的概念了。

而我这次碰到的问题就是这样,我称之为“事件重叠”。

出现这种情况,肯定不行,所以我们要阻止该事件冒泡的发生,那如何来阻止呢?下面将。

三、阻止事件冒泡的方法

首先我先给出一个纯JavaScript版的写法:

function aOnClick(e){
   window.event? window.event.cancelBubble = true : e.stopPropagation();
}

解释:因为IE里的阻止冒泡的写法为window.event.cancelBubble = true,其他浏览器为e.stopPropagation();所以这里做了兼容。

再给出一个jQuery版本的写法:

$(function() {
  $("#alink").click(function(event) {
    event.stopPropagation();
  });
});

四、阻止冒泡的其他方法及不同

我就是用上面的函数阻止了冒泡,但是还有其他的方法可以达到类似的效果,但还是有所不同;

$("#alink").click(function(event) {
  return false;
});

解释:上面方法使用jQuery对alink进行了操作,经过测试,得出结论,该函数阻止了冒泡,但是它将a的默认行为也屏蔽掉了(此处为href属性)。这就是不同之处。

顺便说下,javasccript的阻止默认行为的方法

event.preventDefault();

从上面可以看出,return false;event.stopPropagation();PreventDefault()的并集。

就到这里吧!

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
50个比较实用jQuery代码段
Sep 18 Javascript
每天一篇javascript学习小结(String对象)
Nov 18 Javascript
微信JS接口大全
Aug 25 Javascript
ReactNative-JS 调用原生方法实例代码
Oct 08 Javascript
jQuery Password Validation密码验证
Dec 30 Javascript
AngularJs中 ng-repeat指令中实现含有自定义指令的动态html的方法
Jan 19 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
Mar 04 Javascript
Javascript读取上传文件内容/类型/字节数
Apr 30 Javascript
史上最为详细的javascript继承(推荐)
May 18 Javascript
vue v-for 使用问题整理小结
Aug 04 Javascript
JavaScript正则表达式验证登录实例
Mar 18 Javascript
关于js对textarea换行符的处理方法浅析
Aug 03 #Javascript
webpack4 + react 搭建多页面应用示例
Aug 03 #Javascript
使用JS代码实现俄罗斯方块游戏
Aug 03 #Javascript
小程序tab页无法传递参数的方法
Aug 03 #Javascript
详解Webpack多环境代码打包的方法
Aug 03 #Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
Aug 03 #jQuery
浅析Vue 和微信小程序的区别、比较
Aug 03 #Javascript
You might like
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
星际争霸 Starcraft 游戏介绍
2020/03/14 星际争霸
不要轻信 PHP_SELF的安全问题
2009/09/05 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
javascript(jquery)利用函数修改全局变量的代码
2009/11/02 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
AngularJS中isolate scope的用法分析
2016/11/22 Javascript
vue2.0构建单页应用最佳实战
2017/04/01 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
详解vue中的computed的this指向问题
2018/12/05 Javascript
Node.js+Express+Mysql 实现增删改查
2019/04/03 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
vue商城中商品“筛选器”功能的实现代码
2020/07/01 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
python pandas修改列属性的方法详解
2018/06/09 Python
python3学生名片管理v2.0版
2018/11/29 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
python实现五子棋小程序
2019/06/18 Python
Python3 pickle对象串行化代码实例解析
2020/03/23 Python
Python读取pdf表格写入excel的方法
2021/01/22 Python
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
酒店司机岗位职责
2013/12/14 职场文书
信息专业毕业生五年职业规划参考
2014/02/06 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
毕业论文致谢信
2015/05/14 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL