在点击div中的p时,如何阻止事件冒泡


Posted in Javascript onFebruary 07, 2017

今天整理笔记,发现在学习javaScript的过程中,遇到过一个在当时看来很棘手的问题,现在特地总结一下,也希望能帮助到曾像我一样迷惘的初学者。

我还是以一个案例来说明问题,html代码如下:

<div onclick="show('a')">
   <p onclick="show('b')"></p>
 </div>

css代码如下:

div{
  width:500px;
  height:500px;
  background:red;
 }
 p{
  width:200px;
  height:200px;
  background:blue;
 }

js代码如下:

function show(info){
    alert(info);
 }

稍微懂点js的人都知道当我点击p时,基于事件冒泡机制,会触发父元素div的onclick事件,结果是先弹出b、再弹出a。

那么问题来了,如何修改show()这个函数而只弹出b?我第一次的解决方法是(各位大神勿喷):

function show(e,info){
 function cancelBubble(e){
  e = e || window.event;
  if (e.stopPropagation) {  
     e.stopPropagation(); 
  }else {   
     e.cancelBubble = true; 
  } 
 }
 alert(info);
}

结果老是报错。我就开始各种百度,最终解决方法如下:

function show(info){
   alert(info);
   cancelBubble();
}
function cancelBubble(e) { 
   var evt = e ? e : window.event; 
    if (evt.stopPropagation) {  //W3C 
     evt.stopPropagation(); 
    }else {  //IE  
     evt.cancelBubble = true; 
    } 
}

至于为什么这样?我分析的是这样做有两个好处:1.阻止了事件冒泡,达到只弹出b目的; 2.将阻止事件冒泡的代码封装成了一个函数,可以多次调用。

好了,问题圆满解决。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
IE和firefox浏览器的event事件兼容性汇总
Dec 06 Javascript
js png图片(有含有透明)在IE6中为什么不透明了
Feb 07 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 Javascript
js格式化货币数据实现代码
Sep 04 Javascript
js判断鼠标左、中、右键哪个被点击的方法
Jan 27 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
Mar 25 Javascript
js获取本机操作系统类型的两种方法
Dec 19 Javascript
前端框架Vue.js构建大型应用浅析
Sep 12 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
Jan 08 Javascript
js基于myFocus实现轮播图效果
Feb 14 Javascript
vue2.0结合Element-ui实战案例
Mar 06 Javascript
JavaScript变量基本使用方法实例分析
Nov 15 Javascript
bootstrap vue.js实现tab效果
Feb 07 #Javascript
Node连接mysql数据库方法介绍
Feb 07 #Javascript
jQuery监听浏览器窗口大小的变化实例
Feb 07 #Javascript
Bootstrap table表格简单操作
Feb 07 #Javascript
Jquery根据浏览器窗口改变调整大小的方法
Feb 07 #Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
Feb 07 #Javascript
jquery 判断是否支持Placeholder属性的方法
Feb 07 #Javascript
You might like
表单复选框向PHP传输数据的代码
2007/11/13 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
PHP实现的XML操作类【XML Library】
2016/12/29 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
排序算法的javascript实现与讲解(99js手记)
2014/09/28 Javascript
javasript实现密码的隐藏与显示
2015/05/08 Javascript
AngularJS入门教程之迭代器过滤详解
2016/08/18 Javascript
JS弹出窗口的运用与技巧大全
2016/11/01 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
Python psutil模块简单使用实例
2015/04/28 Python
Python base64编码解码实例
2015/06/21 Python
Python做简单的字符串匹配详解
2017/03/21 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
幼儿教师自我鉴定
2013/11/02 职场文书
业务员岗位职责
2013/11/16 职场文书
超市5.1促销活动
2014/01/15 职场文书
小学生新学期寄语
2014/01/19 职场文书
小学运动会表扬稿
2014/01/19 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
Node实现搜索框进行模糊查询
2021/06/28 Javascript
python_tkinter事件类型详情
2022/03/20 Python