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 相关文章推荐
JS完成代码前最好对其做5件事
Apr 07 Javascript
jquery选择器需要注意的问题
Nov 26 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
Nov 03 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
Dec 02 Javascript
微信小程序获取用户openId的实现方法
May 23 Javascript
详解Vue中的基本语法和常用指令
Jul 23 Javascript
解决vue-cli webpack打包开启Gzip 报错问题
Jul 24 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
vue项目实现图片上传功能
Dec 23 Javascript
JS操作Fckeditor的一些常用方法(获取、插入等)
Feb 19 Javascript
vue+Element-ui实现分页效果
Nov 15 Javascript
Vue Element UI自定义描述列表组件
May 18 Vue.js
关于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
php json_encode奇怪问题说明
2011/09/27 PHP
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
基于javascipt-dom编程 table对象的使用
2013/04/22 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
Node.js中使用事件发射器模式实现事件绑定详解
2014/08/15 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
JavaScript性能优化之小知识总结
2015/11/20 Javascript
基于BootStrap Metronic开发框架经验小结【四】Bootstrap图标的提取和利用
2016/05/12 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
js实现漂亮的星空背景
2019/11/01 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
2020/09/21 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
详解Python中expandtabs()方法的使用
2015/05/18 Python
Python的Django框架安装全攻略
2015/07/15 Python
Python利用正则表达式实现计算器算法思路解析
2018/04/25 Python
python 读取.csv文件数据到数组(矩阵)的实例讲解
2018/06/14 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
django中ORM模型常用的字段的使用方法
2019/03/05 Python
Python解析多帧dicom数据详解
2020/01/13 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
财产公证书样本
2014/04/04 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
财务助理岗位职责范本
2014/10/09 职场文书
加强机关作风建设心得体会
2014/10/22 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书