jQuery阻止同类型事件小结


Posted in Javascript onApril 19, 2013
<!DOCTYPE HTML> 
<html> 
<head> 
<title>test</title> 
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
</head> 
<body> 
<div style="height:300px;background-color:red;" id="red"> 
<div style="height:200px;background-color:green;" id="green"> 
</div> 
</div> 
</body> 
</html>

在上面的HTML中,red元素是green元素的父元素。
$(function(){ 
$("#green").click(function(event){ 
alert("green click1"); 
}); 
$("#green").click(function(event){ 
alert("green click2"); 
}); 
$("#red").click(function(event){ 
alert("red click"); 
}); 
});

上面的js代码给red元素和green元素添加了三个click事件。
当点击子元素green元素时,会依次执行green click1、green click2、red click事件。
事件追加:点击green元素会依次执行green click1、green click2两个事件(同一元素的同类型事件)。
事件冒泡:点击green元素会触发父元素的red click事件(父级元素的同类型事件)。
1、 在子元素事件函数中阻止事件冒泡
方法1:event.stopPropagation()
$(function(){ 
$("#green").click(function(event){ 
event.stopPropagation(); 
alert("green click"); 
}); 
$("#red").click(function(event){ 
alert("red click"); 
}); 
});

方法2:return false
$(function(){ 
$("#green").click(function(event){ 
alert("green click"); 
return false; 
}); 
$("#red").click(function(event){ 
alert("red click"); 
}); 
});

通过上面的两种方法,点击子元素green区域后,red click事件被阻止不再执行。但不会影响red元素其他区域的点击。
二者区别:
return false相当于event.preventDefault()+event.stopPropagation()。
2、 在父元素事件函数中阻止事件冒泡
$(function(){ 
$("#green").click(function(event){ 
alert("green click"); 
}); 
$("#red").click(function(event){ 
if(event.target == this) 
{ 
alert("red click"); 
} 
}); 
});

通过if(event.target== this)判断点击的目标元素是不是red元素本身,如果不是red本身而是它的子元素green元素,则不会执行if内的代码。
3、 阻止事件追加
以上的方法只能阻止事件冒泡(也就是父级元素的同类型事件),但不能阻止事件追加(同一元素的同类型事件)。
$(function(){ 
$("#green").click(function(event){ 
event.stopImmediatePropagation(); 
alert("green click"); 
}); 
$("#green").click(function(){ 
alert("green click2"); 
}); 
});

event.stopImmediatePropagation()不但可以阻止green click2事件,同时也阻止事件冒泡。
Javascript 相关文章推荐
说明你的Javascript技术很烂的五个原因
Apr 26 Javascript
关于使用 jBox 对话框的提交不能弹出问题解决方法
Nov 07 Javascript
js比较日期大小的方法
May 12 Javascript
学习JavaScript设计模式(单例模式)
Nov 26 Javascript
JS中创建函数的三种方式及区别
Mar 13 Javascript
详解angularJs中自定义directive的数据交互
Jan 13 Javascript
详解Vue监听数据变化原理
Mar 08 Javascript
基于pako.js实现gzip的压缩和解压功能示例
Jun 13 Javascript
Vue父子模版传值及组件传值的三种方法
Nov 27 Javascript
Vue实现移动端左右滑动效果的方法
Nov 27 Javascript
VuePress 中如何增加用户登录功能
Nov 29 Javascript
微信小程序实现电影App导航和轮播
Nov 30 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
Apr 19 #Javascript
Extjs4 GridPanel 的几种样式使用介绍
Apr 18 #Javascript
Extjs4 GridPanel的主要配置参数详细介绍
Apr 18 #Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
Apr 18 #Javascript
JQuery 常用方法和事件详细介绍
Apr 18 #Javascript
基于JQuery 滑动与动画的说明介绍
Apr 18 #Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
Apr 18 #Javascript
You might like
Zend Studio (eclipse)使用速度优化方法
2011/03/23 PHP
数据库中排序的对比及使用条件详解
2012/02/23 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
thinkphp多表查询两表有重复相同字段的完美解决方法
2016/09/22 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
php往mysql中批量插入数据实例教程
2018/12/12 PHP
JavaScript和ActionScript的交互实现代码
2010/08/01 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
Javascript核心读书有感之类型、值和变量
2015/02/11 Javascript
JS实现图片产生波纹一样flash效果的方法
2015/02/27 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
在JSP中如何实现MD5加密的方法
2016/11/02 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
解决VUEX刷新的时候出现数据消失
2017/07/03 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
2017/07/24 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
Vuejs开发环境搭建及热更新【推荐】
2018/09/07 Javascript
tracking.js实现前端人脸识别功能
2020/04/16 Javascript
python消除序列的重复值并保持顺序不变的实例
2018/11/08 Python
详解mac python+selenium+Chrome 简单案例
2019/11/08 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
彪马西班牙官网:PUMA西班牙
2019/06/18 全球购物
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
家长评语和期望
2014/02/10 职场文书
土木工程师职业规划范文
2014/03/07 职场文书
购房公证委托书(2014版)
2014/09/12 职场文书
2015年乡镇扶贫工作总结
2015/04/08 职场文书
任命书格式模板
2015/09/22 职场文书
2016中秋节广告语
2016/01/28 职场文书
解决mysql的int型主键自增问题
2021/07/15 MySQL
解决Jenkins集成SonarQube遇到的报错问题
2021/07/15 Java/Android
Golang表示枚举类型的详细讲解
2021/09/04 Golang