jquery——事件冒泡、事件委托
2024-10-20 17:18:19
一个事件冒泡的例子:
<!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>
最新文章
- parawork平台介绍
- event
- Kubernetes deployed on multiple ubuntu nodes
- Redis主从自动failover
- 测试web数据库的分布式事务atomikos 的三种数据源 SimpleDataSourceBean,AtomikosDataSourceBean,AtomikosNonXADataSourceBean
- CentOS7添加第三方源
- C#中byte[]与string的转换
- c# 集合ArrayList;特殊集合Stack、Queue
- 根据文字计算Label的尺寸
- 移植MonkeyRunner的图片对比和获取子图功能的实现-Appium篇
- git clone 太慢怎么办?
- 【转】缓存淘汰算法系列之3——FIFO类
- 机器学习技法:11 Gradient Boosted Decision Tree
- SSH本地端口转发的理解
- Vue项目History模式404问题解决
- HDU 1542 矩形面积并【离散化+线段树+扫描线】
- 【scrapy】爬虫中报Forbidden by robots.txt
- cocos2dx 3.1.1移植安卓apk (lua项目交叉编译 mac环境下)
- MongoDB 数据查询
- 【Linux 命令】sed 命令
热门文章
- xml schema 中如何定义类似Map的结构
- SQL SERVER 中的*=和=*
- 【转】 Pro Android学习笔记(七一):HTTP服务(5):多线程调用HttpClient
- java基础知识(8)---内部类
- 什么是Nginx?为什么使用Nginx?
- Linux TCP通信例子
- [原]toString()方法的复写作用, 以及打印集合.
- Matlab2012a下配置LibSVM—3.18
- SpringBoot05 数据操作03 ->; JPA查询方法的规则定义
- Flask11 Session、CSRF、注销session、利用端点自动跳转