在点击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 相关文章推荐
IE6/7/8/9不支持exec的简写方式
May 25 Javascript
jquery解析xml字符串简单示例
Apr 11 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
Aug 04 Javascript
让人蛋疼的JavaScript语法特性
Sep 30 Javascript
jquery使用each方法遍历json格式数据实例
May 18 Javascript
jQuery中的siblings用法实例分析
Dec 24 Javascript
vue-router实现组件间的跳转(参数传递)
Nov 07 Javascript
vue自定义指令directive实例详解
Jan 17 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
Mar 14 Javascript
vue.js单文件组件中非父子组件的传值实例
Sep 13 Javascript
TypeScript之调用栈的实现
Dec 31 Javascript
原生JS实现飞机大战小游戏
Jun 09 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
安装APACHE
2007/01/15 PHP
php下防止单引号,双引号在接受页面转义的设置方法
2008/09/25 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
怎么用javascript进行拖拽
2006/07/20 Javascript
你的 mixin 真的兼容 ECMAScript 5 吗?
2013/04/11 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
PHP捕捉异常中断的方法
2016/10/24 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
浅谈鸿蒙 JavaScript GUI 技术栈
2020/09/17 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
pandas全表查询定位某个值所在行列的方法
2018/04/12 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
python中K-means算法基础知识点
2021/01/25 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
用C或者C++语言实现SOCKET通信
2015/02/24 面试题
廉洁教育学习材料
2014/05/19 职场文书
工商管理专业毕业生求职信
2014/05/26 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
教师四风对照检查材料思想汇报
2014/09/17 职场文书
婚育证明格式
2015/06/17 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android