在点击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 相关文章推荐
YUI 读码日记之 YAHOO.lang.is*
Mar 22 Javascript
JavaScript设计模式之外观模式实例
Oct 10 Javascript
jQuery 动态云标签插件
Nov 11 Javascript
javascript常用方法汇总
Dec 02 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
微信小程序 开发之快递查询功能的实现
Jan 09 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
Jun 19 Javascript
微信小程序仿美团城市选择
Jun 06 Javascript
vue使用rem实现 移动端屏幕适配
Sep 26 Javascript
微信小程序当前时间时段选择器插件使用方法详解
Dec 28 Javascript
微信小程序常见页面跳转操作简单示例
May 01 Javascript
一文帮你理解PReact10.5.13源码
Apr 03 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调用Webservice实例代码
2011/07/29 PHP
使用PHP会话(Session)实现用户登陆功能
2013/06/29 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
PHP中使用curl入门教程
2015/07/02 PHP
PHP加密解密实例分析
2015/12/25 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
2016/05/21 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
jQuery 前的按键判断代码
2010/03/19 Javascript
潜说js对象和数组
2011/05/25 Javascript
JS实现模仿微博发布效果实例代码
2013/12/16 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
2015/04/22 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
JavaScript笔记之数据属性和存储器属性
2016/03/31 Javascript
将jquery.qqFace.js表情转换成微信的字符码
2017/12/01 jQuery
vue.js input框之间赋值方法
2018/08/24 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
python安装教程
2018/02/28 Python
python提取包含关键字的整行数据方法
2018/12/11 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
Django项目之Elasticsearch搜索引擎的实例
2019/08/21 Python
领班岗位职责范文
2014/02/06 职场文书
医院护士见习期自我鉴定
2014/04/10 职场文书
我的中国梦口号
2014/06/16 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
暑期培训班招生方案
2014/08/26 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
服务员岗位职责
2015/02/03 职场文书
创业计划书之儿童理发店
2019/09/27 职场文书
css实现两栏布局,左侧固定宽,右侧自适应的多种方法
2021/08/07 HTML / CSS