浅谈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 相关文章推荐
复制本贴标题和地址的js代码
Jul 01 Javascript
高亮显示web页表格行的javascript代码
Nov 19 Javascript
JavaScript 用cloneNode方法克隆节点的代码
Oct 15 Javascript
jQuery 鼠标经过(hover)事件的延时处理示例
Apr 14 Javascript
JQuery使用index方法获取Jquery对象数组下标的方法
May 18 Javascript
使用js复制链接中的部分文字的方法
Jul 30 Javascript
jQuery实现右下角可缩放大小的层完整实例
Jun 20 Javascript
Vue单文件组件基础模板小结
Aug 10 Javascript
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
Vue三种常用传值示例(父传子、子传父、非父子)
Jul 24 Javascript
JS添加或删除HTML dom元素的方法实例分析
Mar 05 Javascript
Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验
Apr 22 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
php+redis实现注册、删除、编辑、分页、登录、关注等功能示例
2017/02/15 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
理解JavaScript的caller,callee,call,apply
2009/04/28 Javascript
JQuery 网站换肤功能实现代码
2009/11/02 Javascript
JavaScript 原型与继承说明
2010/06/09 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
vue.js之vue-cli脚手架的搭建详解
2017/05/05 Javascript
JS之if语句对接事件动作逻辑(详解)
2017/06/28 Javascript
VueJs使用Amaze ui调整列表和内容页面
2017/11/30 Javascript
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
js实现黑白div块画空心的图形
2018/12/13 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
全面解析Vue中的$nextTick
2020/12/24 Vue.js
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
Python入门篇之编程习惯与特点
2014/10/17 Python
使用IronPython把Python脚本集成到.NET程序中的教程
2015/03/31 Python
Python 实现网页自动截图的示例讲解
2018/05/17 Python
Python Pillow Image Invert
2019/01/22 Python
python GUI库图形界面开发之PyQt5表格控件QTableView详细使用方法与实例
2020/03/01 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
CSS3中引入多种自定义字体font-face
2020/06/12 HTML / CSS
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
x-ua-compatible content=”IE=7, IE=9″意思理解
2013/07/22 HTML / CSS
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
奢华的意大利皮革手袋:Bene Handbags
2019/10/29 全球购物
创立科技Java面试题
2015/11/29 面试题
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers