在点击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 相关文章推荐
动态调用css文件——jquery的应用
Feb 20 Javascript
javascript 定义初始化数组函数
Sep 07 Javascript
jsp+javascript打造级连菜单的实例代码
Jun 14 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
Sep 01 Javascript
Javascript 构造函数详解
Oct 22 Javascript
jQuery实现新消息在网页标题闪烁提示
Jun 23 Javascript
JS实现简单抖动效果
Jun 01 Javascript
javascript删除数组元素的七个方法示例
Sep 09 Javascript
关于vue利用postcss-pxtorem进行移动端适配的问题
Nov 20 Javascript
微信小程序如何获取地址
Dec 24 Javascript
Node.js API详解之 V8模块用法实例分析
Jun 05 Javascript
vue操作dom元素的3种方法示例
Sep 20 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
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
用PHP制作静态网站的模板框架(三)
2006/10/09 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
Zend Framework分发器用法示例
2016/12/11 PHP
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
angularjs实现简单的购物车功能
2017/09/21 Javascript
自己动手封装一个React Native多级联动
2018/09/19 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
Python基础知识_浅谈用户交互
2017/05/31 Python
pytorch 获取层权重,对特定层注入hook, 提取中间层输出的方法
2019/08/17 Python
Python字典取键、值对的方法步骤
2020/09/30 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
Joe Fresh官网:加拿大时尚品牌和零售连锁店
2016/11/30 全球购物
建材业务员岗位职责
2013/12/08 职场文书
美容师的职业规划书
2013/12/27 职场文书
优秀员工评语
2014/02/10 职场文书
《火烧云》教学反思
2014/04/12 职场文书
大学生社团活动总结
2014/04/26 职场文书
环保倡议书格式范文
2014/05/14 职场文书
品牌服务方案
2014/06/03 职场文书
中职生自荐信范文
2014/06/15 职场文书
个人违纪检讨书
2014/09/15 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
2015年服务员个人工作总结
2015/05/27 职场文书
公诉意见书范文
2015/06/05 职场文书
个人收入证明格式
2015/06/24 职场文书
python爬取新闻门户网站的示例
2021/04/25 Python
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL