深入理解jQuery中的事件冒泡


Posted in Javascript onMay 24, 2016

1.什么是冒泡

eg:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title>事件冒泡</title>
  <script src="../../js/jQuery1.11.1.js"></script>
  <script type="text/javascript">
    $(function () {
      //为span元素绑定click事件
      $('span').bind('click', function () {
        var txt = $('#msg').html() + '<p>内层span元素被点击</p>';
        $('#msg').html(txt);
        
      });
      //为span元素绑定click事件
      $('#content').bind('click', function () {
        var txt = $('#msg').html() + '<p>外层div元素被点击</p>';
        $('#msg').html(txt);
      });
      //为span元素绑定click事件
      $('body').bind('click', function () {
        var txt = $('#msg').html() + '<p>body元素被点击</p>';
        $('#msg').html(txt);
      });
    });
    
  </script>
</head>
<body>
  <div id="content">
    外层div元素
    <span>内层span元素</span>
  </div>
  <div id="msg"></div>
</body>
</html>

当你单击‘内层span元素'时,即触发<span>元素的click事件时,会输出3条记录

即:

内层span元素被点击

外层div元素被点击

body元素被点击

这就是事件冒泡引起的。

深入理解jQuery中的事件冒泡

 

2.事件冒泡引发的问题

01.事件对象

在程序中使用事件对象,只需要为函数添加一个参数,jQuery代码如下:

$('element').bind('click',function(event){ //event:事件对象

});

02.停止事件冒泡

在jQuery中提供了stopPropagation()方法来停止事件冒泡

以span元素绑定click事件为例:

//为span元素绑定click事件
      $('span').bind('click', function (event) { //event:事件对象
        var txt = $('#msg').html() + '<p>内层span元素被点击</p>';
        $('#msg').html(txt);
        event.stopPropagation(); //停止事件冒泡
      });

当你单击‘内层span元素'时,即触发<span>元素的click事件时,这时只会输出1条记录

即:

内层span元素被点击

这样就解决了冒泡问题

03.阻止默认行为

网页中的元素有自己默认的行为,例如,单击超链接后会跳转,单击‘提交'表单会提交,有时需要阻止元素的默认行为

在jQuery中,提供了preventDefault()方法来阻止元素的默认行为。

eg:以输入提交为例

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  <title></title>
  <script src="../../js/jQuery1.11.1.js"></script>
  <script type="text/javascript">
    $(function () {
      $('#sub').bind('click', function (event) {
        var username = $('#username').val(); //获取元素的值
        if (username == "") {  //判断是否为空
          alert('文本框的值不能为空'); //提示信息
          event.preventDefault(); //阻止默认行为(表单提交)
        }
      });
    });
  </script>
</head>
<body>
  <form action="/">
    用户名:<input type="text" id="username" />
    <input type="submit" value="提交" id="sub" />
  </form>  
</body>
</html>

假如你不输入内容,这样就可以阻止默认行为(表单提交)

总结:如果想同时对事件停止冒泡和默认行为,可以在事件处理函数中返回false。这是对在事件对象上同时调用stopPropagation()方法和preventDefault()方法的一种简写方式。

在上面表单的例子中,可以把

event.preventDefault();  //阻止默认行为(表单提交)

改写为:return false;

也可以把事件冒泡中的event.stopPropagation(); //停止事件冒泡

改写为:return false;

04.事件捕获

深入理解jQuery中的事件冒泡

05.事件对象的属性

 深入理解jQuery中的事件冒泡

事件对象的属性 详情请参考:http://www.w3school.com.cn/jsref/dom_obj_event.asp

以上这篇深入理解jQuery中的事件冒泡就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
document.body.scrollTop 值总为0的解决方法 比较常见的标准问题
Nov 30 Javascript
artDialog 4.1.5 Dreamweaver代码提示/补全插件 附下载
Jul 31 Javascript
js 删除数组的几种方法小结
Feb 21 Javascript
AngularJS中实现动画效果的方法
Jul 28 Javascript
JavaScript中String对象的方法介绍
Jan 04 Javascript
angular.js 路由及页面传参示例
Feb 24 Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 Javascript
vue项目上传Github预览的实现示例
Nov 06 Javascript
超好用的jQuery分页插件jpaginate用法示例【附源码下载】
Dec 06 jQuery
JavaScript类的继承操作实例总结
Dec 20 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 Javascript
解决vant中 tab栏遇到的坑 van-tabs
Nov 04 Javascript
jQuery 弹出层插件(推荐)
May 24 #Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 #Javascript
深入理解JavaScript中为什么string可以拥有方法
May 24 #Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
May 23 #Javascript
JavaScript程序中的流程控制语句用法总结
May 23 #Javascript
Node.js服务器环境下使用Mock.js拦截AJAX请求的教程
May 23 #Javascript
谈一谈bootstrap响应式布局
May 23 #Javascript
You might like
php 判断服务器操作系统的类型
2014/02/17 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
PHP水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
JavaScript 密码强度判断代码
2009/09/05 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
javascript判断非数字的简单例子
2013/07/18 Javascript
javascript正则表达式之search()用法实例
2015/01/19 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
Angular中的$watch方法详解
2017/09/18 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
详解iframe跨域的几种常用方法(小结)
2019/04/29 Javascript
Openlayers学习之加载鹰眼控件
2020/09/28 Javascript
python实现查询苹果手机维修进度
2015/03/16 Python
Python学习之Anaconda的使用与配置方法
2018/01/04 Python
获取python的list中含有重复值的index方法
2018/06/27 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
使用Python获取网段IP个数以及地址清单的方法
2018/11/01 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
Python基础教程之if判断,while循环,循环嵌套
2019/04/25 Python
Python 元组操作总结
2019/09/18 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
Order by的几种用法
2013/06/16 面试题
奥巴马连任演讲稿
2014/05/15 职场文书
销售目标责任书
2014/07/23 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
教师学期个人总结
2015/02/11 职场文书
工作犯错保证书
2015/05/11 职场文书
小学英语听课心得体会
2016/01/14 职场文书
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers