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 相关文章推荐
Javascript &amp; DHTML 实例编程(教程)基础知识
Jun 02 Javascript
Javascript 兼容firefox的一些问题
May 21 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
Nov 25 Javascript
js 固定悬浮效果实现思路代码
Aug 02 Javascript
使用canvas及js简单生成验证码方法
Apr 02 Javascript
Node 自动化部署的方法
Oct 17 Javascript
代码实例ajax实现点击加载更多数据图片
Oct 12 Javascript
JavaScript简单实现动态改变HTML内容的方法示例
Dec 25 Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 Javascript
浅谈vue3中effect与computed的亲密关系
Oct 10 Javascript
js中addEventListener()与removeEventListener()用法案例分析
Mar 02 Javascript
vue等两个接口都返回结果再执行下一步的实例
Sep 08 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
DOTA2 玩家自创拉野攻略 特色英雄快速成长篇
2020/04/20 DOTA
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
Yii框架多语言站点配置方法分析【中文/英文切换站点】
2020/04/07 PHP
js类中的公有变量和私有变量
2008/07/24 Javascript
jquery实现网页查找功能示例分享
2014/02/12 Javascript
AngularJS基础学习笔记之控制器
2015/05/10 Javascript
如何提高javascript加载速度
2016/12/26 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
决策树的python实现方法
2014/11/18 Python
python使用pil生成缩略图的方法
2015/03/26 Python
Python获取指定文件夹下的文件名的方法
2018/02/06 Python
python求质数列表的例子
2019/11/24 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
tensorflow之并行读入数据详解
2020/02/05 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Python如何在main中调用函数内的函数方式
2020/06/01 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
美国领先的男士和女士内衣购物网站:Freshpair
2019/02/25 全球购物
品恩科技软件测试面试题
2014/10/26 面试题
夜大毕业生自我评价分享
2013/11/10 职场文书
大学生求职推荐信
2013/11/27 职场文书
英语自荐信常用语句
2013/12/13 职场文书
安全生产月宣传标语
2014/10/06 职场文书
本科毕业论文指导教师评语
2014/12/30 职场文书
太空授课观后感
2015/06/17 职场文书
2015中学学校工作总结
2015/07/20 职场文书
诚信教育主题班会
2015/08/13 职场文书
手残删除python之后的补救方法
2021/06/26 Python
mysql sock文件存储了什么信息
2022/07/15 MySQL