深入理解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 相关文章推荐
基于jquery实现的鼠标滑过按钮改变背景图片
Jul 15 Javascript
jquery validate poshytip 自定义样式
Nov 26 Javascript
JS获取并操作iframe中元素的方法
Mar 21 Javascript
js 3秒后跳转页面的实现代码
Mar 10 Javascript
讲解JavaScript中for...in语句的使用方法
Jun 03 Javascript
javascript正则表达式定义(语法)总结
Jan 08 Javascript
Bootstrap表单控件使用方法详解
Jan 11 Javascript
jQuery实现鼠标点击处心形漂浮的炫酷效果示例
Apr 12 jQuery
Angularjs之ngModel中的值验证绑定方法
Sep 13 Javascript
Node.js如何对SQLite的async/await封装详解
Feb 14 Javascript
js实现窗口全屏示例详解
Sep 17 Javascript
Vue Element-ui表单校验规则实现
Jul 09 Vue.js
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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
解决laravel session失效的问题
2019/10/14 PHP
解决在laravel中auth建立时候遇到的问题
2019/10/15 PHP
php array_map()函数实例用法
2021/03/03 PHP
自动更新作用
2006/10/08 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
javascript 基础篇4 window对象,DOM
2012/03/14 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
js判断undefined类型,undefined,null, 的区别详细解析
2013/12/16 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
jquery.validate[.unobtrusive]和Bootstrap实现tooltip错误提示问题分析
2016/10/30 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
Angular2仿照微信UI实现9张图片上传和预览的示例代码
2017/10/19 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
Vue自定义toast组件的实例代码
2018/08/15 Javascript
开发用到的js封装方法(20种)
2018/10/12 Javascript
[02:19]2014DOTA2国际邀请赛 专访820少年们一起去追梦吧
2014/07/14 DOTA
Python求解平方根的方法
2015/03/11 Python
python字典get()方法用法分析
2015/04/17 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
Python将多份excel表格整理成一份表格
2018/01/03 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
如何在django中实现分页功能
2020/04/22 Python
大学毕业生通用自荐信范文
2013/10/31 职场文书
巾帼文明岗申报材料
2014/05/01 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
股东出资证明书范例
2014/10/04 职场文书
运动会运动员赞词
2015/07/22 职场文书
《角的度量》教学反思
2016/02/18 职场文书
详解vue身份认证管理和租户管理
2021/05/25 Vue.js
java executor包参数处理功能 
2022/02/15 Java/Android
python Tkinter模块使用方法详解
2022/04/07 Python