在点击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 相关文章推荐
提高 DHTML 页面性能
Dec 25 Javascript
JavaScript 对象模型 执行模型
Dec 06 Javascript
jquery 锁定弹出层实现代码
Feb 23 Javascript
Javascript常用字符串判断函数代码分享
Dec 08 Javascript
分享20个提升网站界面体验的jQuery插件
Dec 15 Javascript
利用js实现禁止复制文本信息
Jun 03 Javascript
在JavaScript中操作数组之map()方法的使用
Jun 09 Javascript
深入浅析JavaScript中的作用域和上下文
Mar 26 Javascript
Web Uploader文件上传插件使用详解
May 10 Javascript
js获取ip和地区
Mar 10 Javascript
JS匹配日期和时间的正则表达式示例
May 12 Javascript
Vue实现一种简单的无限循环滚动动画的示例
Jan 10 Vue.js
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使用PDO方法详解
2014/12/27 PHP
一个非常完美的读写ini格式的PHP配置类分享
2015/02/12 PHP
Yii2框架中一些折磨人的坑
2019/12/15 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
WordPress JQuery处理沙发头像
2009/06/22 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
JS应用正则表达式转换大小写示例
2014/09/18 Javascript
基于jQuery实现动态数字展示效果
2015/08/12 Javascript
Node.js文件操作方法汇总
2016/03/22 Javascript
JavaScript提高网站性能优化的建议(二)
2016/07/24 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
详解A标签中href=&quot;&quot;的几种用法
2017/08/20 Javascript
React中的refs的使用教程
2018/02/13 Javascript
详解用async/await来处理异步
2019/08/28 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
python类中super()和__init__()的区别
2016/10/18 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
纯css3(无图片/js)制作的几个社交媒体网站的图标
2013/03/21 HTML / CSS
英国医生在线预约:Top Doctors
2019/10/30 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
Fossil德国官网:化石手表、手袋、珠宝及配件
2019/12/07 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
中职生自我鉴定范文
2013/10/03 职场文书
教师自我评价范文
2013/12/16 职场文书
大学毕业自我评价
2014/02/02 职场文书
2015年银行工作总结范文
2015/04/01 职场文书
活动总结模板大全
2015/05/11 职场文书
高端收音机+蓝牙音箱,JBL TUNER FM带收音蓝牙音箱评测
2021/04/24 无线电
Java如何实现树的同构?
2021/06/22 Java/Android
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL