一个事件冒泡的例子:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function () {
$('body').click(function () {
alert(4);
}); $('.grandfather').click(function () {
alert(3);
});
$('.father').click(function () {
alert(2);
});
$('.son').click(function () {
alert(1);
});
})
</script>
<style type="text/css">
.grandfather{
width:300px;
height:300px;
background-color: gold;
position: relative;
}
.father{
width:200px;
height:200px;
background-color: hotpink;
}
.son{
width:100px;
height:100px;
background-color: chartreuse;
position: absolute;
left:0;
top:400px;
}
</style>
</head>
<body>
<div class="grandfather">
<div class="father">
<div class="son"></div>
</div>
</div>
</body>
</html>

事件冒泡有时候是不需要的,需要阻止掉,通过event.stopPropagation()来阻止

 $('body').click(function (event) {
alert(4);
event.stopPROpagation();
});

阻止默认行为:(阻止右键菜单)

$(document).contextmenu(function(event){
event.preventDefault();
})

合并阻止操作:

实际开发中一般把阻止冒泡和阻止默认行为合并起来写

return false;

eg:(弹框--阻止冒泡)

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(function () {
$('#btn').click(function () {
$('#pop').show();
return false;
});
$('#shutoff').click(function () {
$('#pop').hide();
});
$(document).click(function (event) {
$('#pop').hide();
});
$('.pop').click(function () {
return false;
})
})
</script>
<style type="text/css">
.pop_con{
/*暂时隐藏*/
display: none;
}
.pop{
width: 300px;
height:200px;
background-color: #fff;
border:1px solid #000; /*使框居中*/
position: fixed;
left:50%;
top:50%;
margin-left:-150px;
margin-top: -100px;
/*让弹窗覆盖在mask上面*/
z-index:9999;
}
.mask{
position: fixed;
width:100%;
height: 100%;
background-color: #000;
left:0;
top:0;
/*设置透明度*/
opacity:0.3;
/*ie兼容的透明度*/
filter:alpha(opacity=0.3);
/*让弹窗覆盖在mask上面*/
z-index:9990;
}
</style>
</head>
<body>
<h1>首页标题</h1>
<p>页面内容</p>
<input type="button" name="" value="弹出" id="btn">
<!--自制弹框-->
<div class="pop_con" id="pop">
<div class="pop">
<h3>提示信息!</h3>
<a href="#" id="shutoff">关闭</a>
<input type="text" name="">
</div>
<div class="mask">mask</div>
</div>
</body>
</html>

事件委托:利用事件冒泡原理把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能;其次可以让新加入的子元素也拥有相同的操作。

<script type="text/javascript">
<!--事件委托写法-->
$(function () {
$('.list').delegate('li','click',function () {
alert($(this).html());
               //取消委托
$('.list').undelegate();
}); }) </script>

最新文章

  1. parawork平台介绍
  2. event
  3. Kubernetes deployed on multiple ubuntu nodes
  4. Redis主从自动failover
  5. 测试web数据库的分布式事务atomikos 的三种数据源 SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean
  6. CentOS7添加第三方源
  7. C#中byte[]与string的转换
  8. c# 集合ArrayList;特殊集合Stack、Queue
  9. 根据文字计算Label的尺寸
  10. 移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇
  11. git clone 太慢怎么办?
  12. 【转】缓存淘汰算法系列之3——FIFO类
  13. 机器学习技法:11 Gradient Boosted Decision Tree
  14. SSH本地端口转发的理解
  15. Vue项目History模式404问题解决
  16. HDU 1542 矩形面积并【离散化+线段树+扫描线】
  17. 【scrapy】爬虫中报Forbidden by robots.txt
  18. cocos2dx 3.1.1移植安卓apk (lua项目交叉编译 mac环境下)
  19. MongoDB 数据查询
  20. 【Linux 命令】sed 命令

热门文章

  1. xml schema 中如何定义类似Map的结构
  2. SQL SERVER 中的*=和=*
  3. 【转】 Pro Android学习笔记(七一):HTTP服务(5):多线程调用HttpClient
  4. java基础知识(8)---内部类
  5. 什么是Nginx?为什么使用Nginx?
  6. Linux TCP通信例子
  7. [原]toString()方法的复写作用, 以及打印集合.
  8. Matlab2012a下配置LibSVM—3.18
  9. SpringBoot05 数据操作03 -&gt; JPA查询方法的规则定义
  10. Flask11 Session、CSRF、注销session、利用端点自动跳转