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 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
Mar 22 Javascript
javascript 尚未实现错误解决办法
Nov 27 Javascript
原生JS操作网页给p元素添加onclick事件及表格隔行变色
Dec 01 Javascript
javascript实现的一个随机点名功能
Aug 26 Javascript
JavaScript设计模式初探
Jan 07 Javascript
echart简介_动力节点Java学院整理
Aug 11 Javascript
基于vue配置axios的方法步骤
Nov 09 Javascript
angularJS实现动态添加,删除div方法
Feb 27 Javascript
微信小程序与公众号实现数据互通的方法
Jul 25 Javascript
vue实现图片上传预览功能
Dec 23 Javascript
JS数据类型判断的几种常用方法
Jul 07 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
新的一年,新的期待:DC在2020年的四部动画电影
2020/01/01 欧美动漫
Laravel 5 学习笔记
2015/03/06 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
js以对象为索引的关联数组
2010/07/04 Javascript
JQuery表格内容过滤的实现方法
2013/07/05 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
微信小程序 开发之快递查询功能的实现
2017/01/09 Javascript
微信小程序 Button 组件详解及简单实例
2017/01/10 Javascript
BootstrapTable refresh 方法使用实例简单介绍
2017/02/20 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
解决angular 使用原生拖拽页面卡顿及表单控件输入延迟问题
2020/04/21 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
React倒计时功能实现代码——解耦通用
2020/09/18 Javascript
Vue指令实现OutClick的示例
2020/11/16 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
Python类的用法实例浅析
2015/05/27 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
程序员的七夕用30行代码让Python化身表白神器
2019/08/07 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
python实现双色球随机选号
2020/01/01 Python
python pprint模块中print()和pprint()两者的区别
2020/02/10 Python
美国开幕式潮店:Opening Ceremony
2018/02/10 全球购物
护理专业个人求职简历的自我评价
2013/10/13 职场文书
秋季运动会活动方案
2014/02/05 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
党的群众路线教育实践活动制度建设计划方案
2014/10/31 职场文书
2015年采购员工作总结
2015/04/27 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
运动会广播稿100字
2015/08/19 职场文书
pandas数值排序的实现实例
2021/07/25 Python