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 相关文章推荐
Event altKey,ctrlKey,shiftKey属性解析
Dec 18 Javascript
什么是cookie?js手动创建和存储cookie
May 27 Javascript
javascript常用函数归纳整理
Oct 31 Javascript
微信小程序中页面FOR循环和嵌套循环
Jun 21 Javascript
js 奇葩技巧之隐藏代码
Aug 11 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
Aug 09 Javascript
angularjs性能优化的方法
Sep 05 Javascript
Angular Excel 导入与导出的实现代码
Apr 17 Javascript
JS定义函数的几种常用方法小结
May 23 Javascript
JS立即执行的匿名函数用法分析
Nov 04 Javascript
JavaScript canvas动画实现时钟效果
Feb 10 Javascript
vue使用vant中的checkbox实现全选功能
Nov 17 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定时自动生成静态HTML的实现代码
2010/06/20 PHP
php中使用cookie来保存用户登录信息的实现代码
2012/03/08 PHP
php的sso单点登录实现方法
2015/01/08 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP+Jquery与ajax相结合实现下拉淡出瀑布流效果【无需插件】
2016/05/06 PHP
Yii2如何批量添加数据
2016/05/17 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
laravel框架 laravel-admin上传图片到oss的方法
2019/10/13 PHP
Javascript类库的顶层对象名用户体验分析
2010/10/24 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
javascript实现数独解法
2015/03/14 Javascript
javascript遇到html5的一些表单属性
2015/07/05 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
详解用node.js实现简单的反向代理
2017/06/26 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
Javascript call及apply应用场景及实例
2020/08/26 Javascript
从零学python系列之从文件读取和保存数据
2014/05/23 Python
对Python 网络设备巡检脚本的实例讲解
2018/04/22 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
对Pandas DataFrame缺失值的查找与填充示例讲解
2018/11/06 Python
谈谈Python中的while循环语句
2019/03/10 Python
django项目登录中使用图片验证码的实现方法
2019/08/15 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
详解Python爬虫爬取博客园问题列表所有的问题
2021/01/18 Python
pycharm 使用tab跳出正在编辑的括号(){}{}等问题
2021/02/26 Python
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
ORACLE十问
2015/04/20 面试题
计算机专业个人求职自荐信
2013/09/21 职场文书
出差报告范文
2014/11/06 职场文书
2015年敬老月活动总结
2015/03/27 职场文书
大学感恩节活动总结
2015/05/05 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书