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 相关文章推荐
ASP SQL防注入的方法
Dec 25 Javascript
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
Jan 27 Javascript
JavaScript中的anchor()方法使用详解
Jun 08 Javascript
JS实现支持Ajax验证的表单插件
Mar 24 Javascript
JavaScript中原型链存在的问题解析
Sep 25 Javascript
jQuery实现隔行变色的方法分析(对比原生JS)
Nov 18 Javascript
深入了解JavaScript的逻辑运算符(与、或)
Dec 20 Javascript
javascript实现简易计算器
Feb 01 Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 jQuery
js技巧之十几行的代码实现vue.watch代码
Jun 09 Javascript
js canvas实现红包照片效果
Aug 21 Javascript
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
May 10 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模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
php设计模式之单例模式代码
2016/06/11 PHP
php封装的page分页类完整实例
2016/10/18 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
js右键菜单效果代码
2007/07/21 Javascript
js操作ajax返回的json的注意问题!
2010/02/23 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
javascript错误的认识不用关心内存管理
2012/12/15 Javascript
jQuery基本选择器选择元素使用介绍
2013/04/18 Javascript
Jquery使用Firefox FireBug插件调试Ajax步骤讲解
2013/12/02 Javascript
js操纵dom生成下拉列表框的方法
2014/02/24 Javascript
js判断滚动条是否已到页面最底部或顶部实例
2014/11/20 Javascript
JavaScript给url网址进行encode编码的方法
2015/03/18 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
AngularJS中使用HTML5手机摄像头拍照
2016/02/22 Javascript
vue.js中$watch的用法示例
2016/10/04 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
[02:15]2014DOTA2国际邀请赛 赛后退役选手回顾
2014/08/01 DOTA
Python urllib模块urlopen()与urlretrieve()详解
2013/11/01 Python
Python中使用Tkinter模块创建GUI程序实例
2015/01/14 Python
NumPy.npy与pandas DataFrame的实例讲解
2018/07/09 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
2020/01/19 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
python判断两个序列的成员是否一样的实例代码
2020/03/01 Python
Python 创建TCP服务器的方法
2020/07/28 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
科沃斯机器人官网商城:Ecovacs
2016/08/29 全球购物
中药专业大学生医药工作求职信
2013/10/25 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
雾霾停课通知
2015/04/24 职场文书
JavaScript如何优化逻辑判断代码详解
2021/06/08 Javascript
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python