理解jquery事件冒泡


Posted in Javascript onJanuary 03, 2016

一、什么是jquery事件冒泡
在很多教材或者手册都可能会涉及到事件冒泡的概念,老手来说这当然是最基本的概念,但往往对于初学者可能比较陌生或者说从来没有听说过。下面就结合代码实例来简单介绍一下什么是事件冒泡。
代码实例如下:

<html>
<head>
<meta charset=" gb2312">
<title>事件冒泡</title>
<script type="text/javascript" src="mytest/jQuery/jquery-1.8.3.js"></script>
<script type="text/javascript">
$(document).ready(function(){
 $("#second").click(function(){
  alert("我是second");    
 })
 $("#first").click(function(){
  alert("我是first");    
 })
})
</script>
</head>
<body>
<p id="first"><a id="second" href="http://www.baidu.com">点击查看效果</a></p>
</body>
</html>

在以上代码中,我们可能只想点击锚点后弹出“我是third”,但是令人奇怪的事情却是所有父元素定义的click事件都会被触发。这就是一个典型的事件冒泡效果。所谓的冒泡事件就是,如果在某一个对象上触发某一类事件(如上例的click事件),那么此事件会向对象的父级对象传播,并触发父对象上定义的同类事件。事件传播的方向是从最底层到最顶层,类似于水泡从水底浮上来一般。
二、javascript如何阻止事件冒泡
冒泡事件能够带来便利,有时候也会带来麻烦,下面就简单介绍一下如何阻止事件冒泡。
代码实例如下:

<!DOCTYPE html> 
<html> 
<head> 
<meta charset=" utf-8"> 
<head>
<title>事件冒泡</title>
<style type="text/css">
#grandfather{
 border:1px solid #0066FF;
 cellpadding:0px;
 cellspacing:0px;
}
#grandfather td{
 border: 1px solid #0066FF;
}
</style>
<script type="text/javascript">
function trclick(){
 alert("父亲的onclick事件触发");
}
function tableclick(){
 alert("祖父的onclick事件触发");
}
window.onload=function(){
 var grandfather=document.getElementById("grandfather");
 var father=document.getElementById("father");
 var noStop=document.getElementById("noStop");
 var haveStop=document.getElementById("haveStop");
 
 grandfather.onclick=tableclick;
 father.onclick=trclick;
 
 noStop.onclick=function(){
 alert("没有阻止冒泡的子元素");
 }
 haveStop.onclick=function(evt){
 alert("阻止冒泡的子元素");
 if(window.event){
 event.cancelBubble=true;
 }
 else if(evt){
 evt.stopPropagation();
 }
 }
}
</script>
</head>
<body>
<table width="204" id="grandfather">
 <tr >
 <td width="96"></td>
 <td width="96"></td>
 </tr>
 <tr id="father">
 <td id="noStop">没有阻止事件冒泡</td>
 <td id="haveStop">阻止了事件冒泡</td>
 </tr>
 <tr>
 <td> </td>
 <td> </td>
 </tr>
</table>
</body>
</html>

代码注释:
1.if(window.event)这个用来兼容IE8和IE8一下浏览器。
2. evt.stopPropagation()这个是标准浏览器。

以上代码中,一个单元格阻止了事件冒泡,一个没有阻止事件冒泡,希望对大家的学习有所帮助。

Javascript 相关文章推荐
js识别不同浏览器基于userAgent做判断
Jul 29 Javascript
JS+CSS实现六级网站导航主菜单效果
Sep 28 Javascript
基于javascript实现彩票随机数生成(升级版)
Apr 17 Javascript
老生常谈JavaScript数组的用法
Jun 10 Javascript
jQuery无刷新上传之uploadify3.1简单使用
Jun 18 Javascript
javascript实现获取指定精度的上传文件的大小简单实例
Oct 25 Javascript
基于jQuery实现照片墙自动播放特效
Jan 12 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
Mar 16 Javascript
认识less和webstrom的less配置方法
Aug 02 Javascript
Nginx 配置多站点vhost 的方法
Jan 07 Javascript
JS随机数产生代码分享
Feb 24 Javascript
3分钟读懂移动端rem使用方法(推荐)
May 06 Javascript
实例讲解避免javascript冲突的方法
Jan 03 #Javascript
详解js中class的多种函数封装方法
Jan 03 #Javascript
js中利用tagname和id获取元素的方法
Jan 03 #Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
Jan 03 #Javascript
基于javascript实现简单计算器功能
Jan 03 #Javascript
详解Javascript事件驱动编程
Jan 03 #Javascript
基于javascript实现仿百度输入框自动匹配功能
Jan 03 #Javascript
You might like
多重?l件?合查?(一)
2006/10/09 PHP
php intval的测试代码发现问题
2008/07/27 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
2015/05/12 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
PHP+Ajax实现上传文件进度条动态显示进度功能
2018/06/04 PHP
PHP实现简单日历类编写
2020/08/28 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
jQuery DIV弹出效果实现代码
2009/07/03 Javascript
JS DOM 操作实现代码
2010/08/01 Javascript
多种方法实现load加载完成后把图片一次性显示出来
2014/02/19 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
详解vue.js的devtools安装
2017/05/26 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
javacript replace 正则取字符串中的值并替换【推荐】
2018/09/13 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
详解关于element级联选择器数据回显问题
2019/02/20 Javascript
[03:15]2014DOTA2国际邀请赛 专访国士无双信心满满
2014/07/12 DOTA
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
python使用Matplotlib画饼图
2018/09/25 Python
python实现小球弹跳效果
2019/05/10 Python
Python学习笔记之错误和异常及访问错误消息详解
2019/08/08 Python
Python实现将蓝底照片转化为白底照片功能完整实例
2019/12/13 Python
pytorch制作自己的LMDB数据操作示例
2019/12/18 Python
Pytest框架之fixture的详细使用教程
2020/04/07 Python
通过cmd进入python的步骤
2020/06/16 Python
Python os库常用操作代码汇总
2020/11/03 Python
澳大利亚领先的宠物用品商店:VetSupply
2017/09/08 全球购物
Linux面试题LINUX系统类
2014/11/19 面试题
房地产出纳岗位职责
2013/12/01 职场文书
运动会通讯稿300字
2014/02/02 职场文书
个人借款协议书范本
2014/11/17 职场文书
实习生个人总结范文
2015/02/28 职场文书
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
2022/05/04 Python