在点击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 相关文章推荐
JavaScript中__proto__与prototype的关系深入理解
Dec 04 Javascript
文本框回车提交与禁止提交示例
Sep 27 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
Aug 25 Javascript
vue.js+Element实现表格里的增删改查
Jan 18 Javascript
微信小程序 五星评价功能的实现
Mar 09 Javascript
jQuery实现列表的增加和删除功能
Jun 14 jQuery
Vue实现一个无限加载列表功能
Nov 13 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
Nov 19 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 Javascript
JS实现动态无缝轮播
Jan 11 Javascript
解决vue路由name同名,路由重复的问题
Aug 05 Javascript
JavaScript实现世界各地时间显示
Sep 07 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 事务处理数据实现代码
2010/05/13 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
PHP连接MSSQL时nvarchar字段长度被截断为255的解决方法
2014/12/25 PHP
PHP网页缓存技术优点及代码实例
2020/07/29 PHP
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
使用js声明数组,对象在jsp页面中(获得ajax得到json数据)
2013/11/05 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
2014/06/20 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
JQuery组件基于Bootstrap的DropDownList(完整版)
2016/07/05 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
[00:35]TI7不朽珍藏III——寒冰飞龙不朽展示
2017/07/15 DOTA
[50:58]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 Mineski vs EG
2018/04/03 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
法学专业个人求职信
2013/09/26 职场文书
经济学博士求职自荐信范文
2013/11/23 职场文书
小学教师节活动方案
2014/01/31 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
求职意向书
2014/07/29 职场文书
大学生暑期社会实践证明范本
2014/10/24 职场文书
西双版纳导游词
2015/02/03 职场文书
法制主题班会教案
2015/08/13 职场文书
医德医风学习心得体会
2016/01/25 职场文书
windows server 2016 域环境搭建的方法步骤(图文)
2022/06/25 Servers