在点击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 相关文章推荐
js将当前时间格式转换成时间搓(自写)
Sep 26 Javascript
Array 重排序方法和操作方法的简单实例
Jan 24 Javascript
深入理解javascript原型链和继承
Sep 23 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
Feb 26 Javascript
深入理解React中es6创建组件this的方法
Aug 29 Javascript
Node.JS利用PhantomJs抓取网页入门教程
May 19 Javascript
详解js静态资源文件请求的处理
Aug 01 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
jQuery实现轮播图及其原理详解
Apr 12 jQuery
浅谈react性能优化的方法
Sep 05 Javascript
JavaScript实现与web通信的方法详解
Aug 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
arguments对象
2006/11/20 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
javascript内置对象操作详解
2015/02/04 Javascript
JQuery radio(单选按钮)操作方法汇总
2015/04/15 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
node.js 基于cheerio的爬虫工具的实现(需要登录权限的爬虫工具)
2019/04/10 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
Vue实现表格批量审核功能实例代码
2019/05/28 Javascript
通过C++学习Python
2015/01/20 Python
python中使用xlrd、xlwt操作excel表格详解
2015/01/29 Python
Python实现CET查分的方法
2015/03/10 Python
python操作列表的函数使用代码详解
2017/12/28 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
使用sklearn之LabelEncoder将Label标准化的方法
2018/07/11 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
对python 树状嵌套结构的实现思路详解
2019/08/09 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
党员的自我评价范文
2014/01/02 职场文书
生日派对邀请函
2014/01/13 职场文书
优秀本科生求职推荐信
2014/02/24 职场文书
创建青年文明号材料
2014/05/09 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
党员三严三实心得体会
2014/10/13 职场文书
2014年学习部工作总结
2014/11/12 职场文书
女方离婚起诉书
2015/05/18 职场文书
Python网络编程之ZeroMQ知识总结
2021/04/25 Python