浅谈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 相关文章推荐
为JavaScript提供睡眠功能(sleep) 自编译JS引擎
Aug 16 Javascript
关于Ext中form移除textfield方法:hide(),setVisible(false),remove()
Dec 02 Javascript
extjs 时间范围选择自动判断的实现代码
Jun 24 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
JQuery设置时间段下拉选择实例
Dec 30 Javascript
jQuery调用ajax请求的常见方法汇总
Mar 24 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
Feb 17 Javascript
基于JavaScript实现弹出框效果
Feb 19 Javascript
jQuery实现table表格信息的展开和缩小功能示例
Jul 21 jQuery
js实现GIF动图分解成多帧图片上传
Oct 24 Javascript
vue 封装 Adminlte3组件的实现
Mar 18 Javascript
ajax请求前端跨域问题原因及解决方案
Oct 16 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
PL-880隐藏功能
2021/03/01 无线电
剖析 PHP 中的输出缓冲
2006/12/21 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
ThinkPHP实现多数据库连接的解决方法
2014/07/01 PHP
php微信支付接口开发程序
2016/08/02 PHP
PHP通过调用新浪API生成t.cn格式短网址链接的方法详解
2019/02/20 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
Javascript 静态页面实现随机显示广告的办法
2010/11/17 Javascript
由Javascript实现的页面日历
2011/11/04 Javascript
ajax不执行success回调而是执行了error回调
2012/12/10 Javascript
jquery操作对象数组元素方法详解
2014/11/26 Javascript
JavaScript使用cookie记录临时访客信息的方法
2015/04/07 Javascript
JS表格组件神器bootstrap table详解(基础版)
2015/12/08 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
JS利用cookies设置每隔24小时弹出框
2017/04/20 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
Vue 通过自定义指令回顾v-内置指令(小结)
2018/09/03 Javascript
在vue-cli的组件模板里使用font-awesome的两种方法
2018/09/28 Javascript
JS实现扫码枪扫描二维码功能
2020/01/03 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
Python脚本实现下载合并SAE日志
2015/02/10 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
美国摄影爱好者购物网站:Focus Camera
2016/10/21 全球购物
Foot Locker澳洲官网:美国运动服和鞋类零售商
2019/10/11 全球购物
关于环保的建议书400字
2014/03/12 职场文书
党员大会主持词
2014/04/02 职场文书
组织鉴定材料
2014/06/02 职场文书
医德考评自我评价
2014/09/14 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
跑出一片天观后感
2015/06/08 职场文书
2019求职信大礼包
2019/05/15 职场文书
css height属性中的calc方法详解
2021/06/03 HTML / CSS