浅谈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 相关文章推荐
在IE下:float属性会影响offsetTop的取值
Dec 22 Javascript
js的延迟执行问题分析
Jun 23 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
jQuery中dom元素上绑定的事件详解
Apr 24 Javascript
JS与jQuery实现隔行变色的方法
Sep 09 Javascript
jQuery 表单序列化实例代码
Jun 11 jQuery
基于JavaScript实现微信抢红包功能
Jul 20 Javascript
bootstrap modal+gridview实现弹出框效果
Aug 15 Javascript
详解javascript函数写法大全
Mar 25 Javascript
JS实现继承的几种常用方式示例
Jun 22 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
带你使用webpack快速构建web项目的方法
Nov 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调用JAVA的WebService简单实例
2014/03/11 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
js对数字的格式化使用说明
2011/01/12 Javascript
html超链接打开窗口大小的方法
2013/03/05 Javascript
jquery实现个人中心导航菜单效果和美观都非常不错
2014/09/02 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
2016/06/07 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
基于JavaScript实现评论框展开和隐藏功能
2017/08/25 Javascript
聊聊Vue.js的template编译的问题
2017/10/09 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
vue基础之v-bind属性、class和style用法分析
2019/03/11 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
Python合并字符串的3种方法
2015/05/21 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
2019/04/04 Python
python随机数分布random均匀分布实例
2019/11/27 Python
python高阶函数map()和reduce()实例解析
2020/03/16 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
使用python把xmind转换成excel测试用例的实现代码
2020/10/12 Python
python Gabor滤波器讲解
2020/10/26 Python
Python使用Pygame绘制时钟
2020/11/29 Python
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
关于工作时间玩手机的检讨书
2014/09/18 职场文书
杨善洲电影观后感
2015/06/04 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
Spring Data JPA框架自定义Repository接口
2022/04/28 Java/Android