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图片上下tab切换效果
Mar 18 Javascript
jQuery 获取和设置select下拉框的值实现代码
Nov 08 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
Dec 20 Javascript
初识SmartJS - AOP三剑客
Jun 08 Javascript
教你在heroku云平台上部署Node.js应用
Jul 30 Javascript
详谈LABJS按需动态加载js文件
May 07 Javascript
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
Mar 23 jQuery
使用Vue动态生成form表单的实例代码
Apr 26 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
Jun 14 Javascript
使用js实现将后台传入的json数据放在前台显示
Aug 06 Javascript
vue中实现点击按钮滚动到页面对应位置的方法(使用c3平滑属性实现)
Dec 29 Javascript
JS绘图Flot如何实现动态可刷新曲线图
Oct 16 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 动态执行带有参数的类方法
2009/04/10 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
php函数实现判断是否移动端访问
2015/03/03 PHP
php中通过DirectoryIterator删除整个目录的方法
2015/03/13 PHP
PHP中的表达式简述
2016/05/29 PHP
ThinkPHP5 验证器的具体使用
2018/05/31 PHP
Mootools 1.2教程 正则表达式
2009/09/15 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
JavaScritp添加url参数并将参数加入到url中及更改url参数的方法
2015/10/26 Javascript
浅谈javascript中replace()方法
2015/11/10 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
js中常用的Math方法总结
2017/01/12 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
vue与bootstrap实现简单用户信息添加删除功能
2019/02/15 Javascript
详解vue中v-on事件监听指令的基本用法
2020/07/22 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
python中实现精确的浮点数运算详解
2017/11/02 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
python实现最长公共子序列
2018/05/22 Python
Pandas:DataFrame对象的基础操作方法
2018/06/07 Python
Python中字符串与编码示例代码
2019/05/20 Python
详解Python是如何实现issubclass的
2019/07/24 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
对python while循环和双重循环的实例详解
2019/08/23 Python
Python 项目转化为so文件实例
2019/12/23 Python
python实现录制全屏和选择区域录屏功能
2021/02/05 Python
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
校运动会广播稿(100篇)
2014/09/12 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
仓管员岗位职责范本
2015/04/01 职场文书
告诉你创业计划书的8个实用技巧
2019/07/12 职场文书
某学校的2019年度工作报告范本
2019/10/11 职场文书