深入理解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 相关文章推荐
单独使用CKFinder选择图片的方法
Aug 21 Javascript
JavaScript 高级篇之闭包、模拟类,继承(五)
Apr 07 Javascript
基于jQuery实现的图片切换焦点图整理
Dec 07 Javascript
基于jquery实现图片放大功能
May 07 Javascript
jQuery 调用WebService 实例讲解
Jun 28 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
Nov 17 Javascript
Bootstrap3 datetimepicker控件使用实例
Dec 13 Javascript
JS高仿抛物线加入购物车特效实现代码
Feb 20 Javascript
JQueryMiniUI按照时间进行查询的实现方法
Jun 07 jQuery
Django+Vue.js搭建前后端分离项目的示例
Aug 07 Javascript
React组件重构之嵌套+继承及高阶组件详解
Jul 19 Javascript
vue elementUI tree树形控件获取父节点ID的实例
Sep 12 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中数据的批量导入(csv文件)
2006/10/09 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
PHP 一个页面执行时间类代码
2010/03/05 PHP
php中DOMElement操作xml文档实例演示
2013/03/26 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
网上抓的一个特效
2007/05/11 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
input 输入框获得/失去焦点时隐藏/显示文字(jquery版)
2013/04/02 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS
2013/11/18 Javascript
ExpressJS入门实例
2015/01/14 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
javascript多行字符串的简单实现方式
2015/05/04 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
js实现拖拽效果(构造函数)
2015/12/14 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
微信小程序实现页面下拉刷新和上拉加载功能详解
2018/12/03 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
JavaScript原型继承和原型链原理详解
2020/02/04 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
在django中图片上传的格式校验及大小方法
2019/07/28 Python
python处理RSTP视频流过程解析
2020/01/11 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
Laura Geller官网:美国彩妆品牌
2018/12/29 全球购物
大学生求职自荐信
2015/03/24 职场文书
先进个人主要事迹怎么写
2015/11/04 职场文书
Pytest中skip skipif跳过用例详解
2021/06/30 Python