浅谈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 相关文章推荐
简明json介绍
Sep 28 Javascript
Javascript操作URL函数修改版
Nov 07 Javascript
JavaScript判断textarea值是否为空并给出相应提示
Sep 04 Javascript
JS实现的页面自定义滚动条效果
Oct 26 Javascript
javascript时间排序算法实现活动秒杀倒计时效果
Jan 28 Javascript
JS函数定义方式的区别介绍
Mar 22 Javascript
javascript的理解及经典案例分析
May 20 Javascript
快速实现jQuery多级菜单效果
Feb 01 Javascript
Angular2 之 路由与导航详细介绍
May 26 Javascript
使用canvas进行图像编辑的实例
Aug 29 Javascript
springmvc接收jquery提交的数组数据代码分享
Oct 28 jQuery
JavaScript使用面向对象实现的拖拽功能详解
Jun 12 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
超级简单的php+mysql留言本源码
2009/11/11 PHP
PHP多文件上传类实例
2015/03/07 PHP
再谈PHP中单双引号的区别详解
2016/06/12 PHP
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
js在数组中删除重复的元素自保留一个(两种实现思路)
2014/08/22 Javascript
JavaScript实现的in_array函数
2014/08/27 Javascript
JQuery中$.each 和$(selector).each()的区别详解
2015/03/13 Javascript
iOS和Android用同一个二维码实现跳转下载链接的方法
2016/09/28 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
vue组件中使用iframe元素的示例代码
2017/12/13 Javascript
浅谈Redux中间件的实践
2018/07/27 Javascript
node.js 模块和其下载资源的镜像设置的方法
2018/09/06 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python中偏函数partial用法实例分析
2015/07/08 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
python 多线程共享全局变量的优劣
2020/09/24 Python
Scrapy爬虫文件批量运行的实现
2020/09/30 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
美国修容界大佬创建的个人美妆品牌:Kevyn Aucoin Beauty
2018/12/12 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
怎么处理XML的中文问题
2015/03/26 面试题
进步之星获奖感言
2014/02/22 职场文书
股东合作协议书
2014/04/14 职场文书
关于工作经历的证明书
2014/10/11 职场文书
财务整改报告范文
2014/11/05 职场文书
推广普通话主题班会
2015/08/17 职场文书
感谢信的技巧及范例
2019/05/15 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
浅谈spring boot使用thymeleaf版本的问题
2021/08/04 Java/Android