在点击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 相关文章推荐
DOM Scripting中的图片切换[兼容Firefox]
Jun 12 Javascript
javascript 回调函数详解
Nov 11 Javascript
node.js中的fs.unlink方法使用说明
Dec 15 Javascript
jQuery简单实现提交数据出现loading进度条的方法
Mar 29 Javascript
第一章之初识Bootstrap
Apr 25 Javascript
jQuery滚动新闻实现代码
Jun 26 Javascript
Bootstrap框架的学习教程详解(二)
Oct 18 Javascript
canvas实现图像截取功能
Feb 06 Javascript
Vue中android4.4不兼容问题的解决方法
Sep 04 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
Mar 07 Javascript
浅谈JavaScript中的“!!”作用
Aug 03 Javascript
js面向对象编程OOP及函数式编程FP区别
Jul 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连接MongoDB示例代码
2012/09/06 PHP
ThinkPHP3.2.3框架实现执行原生SQL语句的方法示例
2019/04/03 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
网上应用的一个不错common.js脚本
2007/08/08 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
Javascript浅谈之this
2013/12/17 Javascript
表格奇偶行设置不同颜色的核心JS代码
2013/12/24 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
node.js中的buffer.copy方法使用说明
2014/12/14 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
详解Java中String JSONObject JSONArray List转换
2020/11/13 Javascript
python批量下载图片的三种方法
2013/04/22 Python
videocapture库制作python视频高速传输程序
2013/12/23 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
解决python 自动安装缺少模块的问题
2018/10/22 Python
Python中断多重循环的思路总结
2019/10/04 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
详解Python 重学requests发起请求的基本方式
2020/02/07 Python
Python 线性回归分析以及评价指标详解
2020/04/02 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
Python列表嵌套常见坑点及解决方案
2020/09/30 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
自我评价中英文语句
2013/11/30 职场文书
简历中个人自我评价范文
2013/12/26 职场文书
英语专业个人求职信范文
2014/02/01 职场文书
大型晚会策划方案
2014/02/06 职场文书
会计求职自荐信
2015/03/26 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书
解决SpringBoot跨域的三种方式
2021/06/26 Java/Android