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 相关文章推荐
jQuery实现随意改变div任意属性的名称和值(部分原生js实现)
May 28 Javascript
js操作iframe兼容各种主流浏览器示例代码
Jul 22 Javascript
手机号码,密码正则验证
Sep 04 Javascript
javascript页面倒计时实例
Jul 25 Javascript
jQuery+HTML5实现图片上传前预览效果
Aug 20 Javascript
AngularJS学习笔记之依赖注入详解
May 16 Javascript
判断颜色是否合法的正则表达式(详解)
May 03 Javascript
vue实现表格数据的增删改查
Jul 10 Javascript
微信小程序实现商品属性联动选择
Feb 15 Javascript
Vue自定义属性实例分析
Feb 23 Javascript
详解基于Vue/React项目的移动端适配方案
Aug 23 Javascript
Vue强制组件重新渲染的方法讨论
Feb 03 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
PHP中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
php数组中删除元素之重新索引的方法
2014/09/16 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
PHP使用pdo实现事务处理操作示例
2018/09/05 PHP
php的优点总结 php有哪些优点
2019/07/19 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
Tinymce+jQuery.Validation使用产生的BUG
2010/03/29 Javascript
jQuery学习笔记之jQuery.extend(),jQuery.fn.extend()分析
2014/06/09 Javascript
jQuery对象的length属性用法实例
2014/12/27 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
用Angular实时获取本地Localstorage数据,实现一个模拟后台数据登入的效果
2016/11/09 Javascript
详解JavaScript中数组的reduce方法
2016/12/02 Javascript
详解webpack+es6+angular1.x项目构建
2017/05/02 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
通过layer实现可输入的模态框的例子
2019/09/27 Javascript
jquery自定义组件实例详解
2020/12/31 jQuery
vue 动态生成拓扑图的示例
2021/01/03 Vue.js
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
[46:47]完美世界DOTA2联赛PWL S2 FTD vs Magma 第二场 11.20
2020/11/23 DOTA
python中二维阵列的变换实例
2014/10/09 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
Python爬取成语接龙类网站
2018/10/19 Python
python3 pygame实现接小球游戏
2019/05/14 Python
python操作excel让工作自动化
2019/08/09 Python
Python实现定时监测网站运行状态的示例代码
2020/09/30 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
详解canvas绘制网络字体几种方法
2019/08/27 HTML / CSS
焊接专业毕业生求职信
2013/10/01 职场文书
国际会议邀请函范文
2014/01/16 职场文书
先进员工获奖感言
2014/08/14 职场文书
领导欢送会主持词
2015/07/06 职场文书
2016高中社会实践心得体会范文
2016/01/14 职场文书
python3操作redis实现List列表实例
2021/08/04 Python