浅谈jQuery 中的事件冒泡和阻止默认行为


Posted in Javascript onMay 28, 2016

1、事件冒泡

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
	 	<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
		<script type="text/javascript">
			$(function() {
				//为 <span> 元素绑定 click 事件
				$("span").click(function() {
					$("#msg").html($("#msg").html() + "<p>内层span元素被单击</p>");
				});
				//为 Id 为 content 的 <div> 元素绑定 click 事件
				$("#content").click(function() {
					$("#msg").html($("#msg").html() + "<p>外层div元素被单击</p>");
				});
				//为 <body> 元素绑定 click 事件
				$("body").click(function() {
					$("#msg").html($("#msg").html() + "<p>body元素被单击</p>");
				});
			});
		</script> 	
		
		<!-- CSS -->
		<style type="text/css">
			#content {
				background: #b17af5;
			}		
		</style>
 	</head>
 
 	<!-- HTML -->
 	<body>
 		<div id="content">
 			外层div元素<br />
 			<span style="background: silver;">内层span元素</span><br />
 			外层div元素
 		</div><br />
 		<div id="msg"></div>
 	</body>
</html>

当点击内部 <span> 元素时,会触发自身及外层 <div> 和 <body> 的点击事件,这就是事件冒泡引起的。事件会随着 DOM 的层次结构依次向上传播。

事件冒泡可能会引起意料之外的效果,有时候需要阻止事件的冒泡行为,使用 stopPropagation() 方法来实现。

修改 <span> 元素的 click 事件函数:

//为 <span> 元素绑定 click 事件
$("span").click(function(event) {	//为方法添加一个事件对象参数
	$("#msg").html($("#msg").html() + "<p>内层span元素被单击</p>");
	event.stopPropagation();	//阻止 <span> 的 click 事件冒泡
});

此时点击内部 <span> 元素时,只会触发自身的 click 事件,不会再向上冒泡。

2、阻止默认行为

有时候用户的操作未满足某些条件时,需要阻止某些元素的默认行为,如链接的跳转和表单的提交等,jQuery 提供了 preventDefault() 方法来实现。

当用户未填写用户名时,阻止表单提交:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
	 	<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
		<script type="text/javascript">
			$(function() {
				$(":submit").click(function(event) {	 //为方法添加一个事件对象参数
					//当未输入用户名时,提示并阻止提交
					if ($(":text").val() == "") {	
						$("#msg").text("用户名不能为空");
						event.preventDefault();		//阻止提交按钮的默认行为(提交表单)
					}
				});
			});
		</script> 	
 	</head>
 
 	<!-- HTML -->
 	<body>
 		<form action="register.action">
 			用户名<input type="text" name="id" />
 			<input type="submit" value="注册" />
 			<div id="msg"></div>
 		</form>
 	</body>
</html>

如果想同时阻止事件冒泡和阻止元素默认行为,可以在事件函数中返回 false 来代替调用 stopPropagation() 和 preventDefault() 方法。

如:

$(":submit").click(function(event) {	 //为方法添加一个事件对象参数
	//当未输入用户名时,提示并阻止提交
	if ($(":text").val() == "") {	
		$("#msg").text("用户名不能为空");
		return false;		//阻止提交按钮的默认行为(提交表单)和事件冒泡
	}
});$("span").click(function(event) {	//为方法添加一个事件对象参数
	$("#msg").html($("#msg").html() + "<p>内层span元素被单击</p>");
	return false;	//阻止 <span> 的 click 事件冒泡和默认行为(此元素没有默认行为)
});

以上这篇浅谈jQuery 中的事件冒泡和阻止默认行为就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery自动切换/点击切换选项卡效果的小例子
Aug 12 Javascript
connect中间件session、cookie的使用方法分享
Jun 17 Javascript
js实现iframe自动自适应高度的方法
Feb 17 Javascript
jQuery使用before()和after()在元素前后添加内容的方法
Mar 26 Javascript
妙用Bootstrap的 popover插件实现校验表单提示功能
Aug 29 Javascript
Mongoose经常返回e11000 error的原因分析
Mar 29 Javascript
详解angular 中的自定义指令之详解API
Jun 20 Javascript
AngularJS动态添加数据并删除的实例
Feb 27 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
Dec 03 Javascript
如何能分清npm cnpm npx nvm
Jan 17 Javascript
layui table去掉右侧滑动条的实现方法
Sep 05 Javascript
js实现磁性吸附的示例
Oct 26 Javascript
jquery取消事件冒泡的三种方法(推荐)
May 28 #Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 #Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
May 28 #Javascript
jQuery Mobile动态刷新页面样式的实现方法
May 28 #Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
May 28 #Javascript
jQuery操作动态生成的内容的方法
May 28 #Javascript
javascript 用函数实现继承详解
May 28 #Javascript
You might like
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
PHP CURL使用详解
2019/03/21 PHP
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
JS版网站风格切换实例代码
2008/10/06 Javascript
jquery判断浏览器类型的代码
2012/11/05 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
轻松创建nodejs服务器(2):nodejs服务器的构成分析
2014/12/18 NodeJs
js+jquery实现图片裁剪功能
2015/01/02 Javascript
JS实现为排序好的字符串找出重复行的方法
2016/03/02 Javascript
vue2.0+koa2+mongodb实现注册登录
2018/04/10 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python显示天气预报
2014/03/02 Python
python按照多个字符对字符串进行分割的方法
2015/03/17 Python
python连接MySQL数据库实例分析
2015/05/12 Python
简单谈谈python中的多进程
2016/11/06 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
Python实现嵌套列表去重方法示例
2017/12/28 Python
解决python给列表里添加字典时被最后一个覆盖的问题
2019/01/21 Python
python matplotlib模块基本图形绘制方法小结【直线,曲线,直方图,饼图等】
2020/04/26 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
最新销售员个人自荐信
2013/09/21 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
理工类毕业自我鉴定
2014/02/20 职场文书
校园文明标语
2014/06/13 职场文书
2014年电厂工作总结
2014/12/04 职场文书
行政助理岗位职责范本
2015/04/11 职场文书
七一晚会主持词
2015/06/29 职场文书
联村联户简报
2015/07/21 职场文书
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python