深入理解jQuery之防止冒泡事件


Posted in Javascript onMay 24, 2016

冒泡事件就是点击子节点,会向上触发父节点,祖先节点的点击事件。

下面是html代码部分:

<body>
<div id="content">
  外层div元素
  <span>内层span元素</span>
  外层div元素
</div>

<div id="msg"></div>
</body>

对应的jQuery代码如下:

<script type="text/javascript">
$(function(){
  // 为span元素绑定click事件
  $('span').bind("click",function(){
    var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";//获取html信息
    $('#msg').html(txt);// 设置html信息
  });
  // 为div元素绑定click事件
  $('#content').bind("click",function(){
    var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
    $('#msg').html(txt);
  });
  // 为body元素绑定click事件
  $("body").bind("click",function(){
    var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
    $('#msg').html(txt);
  });
})
</script>

当点击span时,会触发div与body 的点击事件。点击div时会触发body的点击事件。

如何防止这种冒泡事件发生呢?

修改如下:

<script type="text/javascript">
$(function(){
    // 为span元素绑定click事件
  $('span').bind("click",function(event){
    var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
    $('#msg').html(txt);
    event.stopPropagation();  // 阻止事件冒泡
  });
  // 为div元素绑定click事件
  $('#content').bind("click",function(event){
    var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
    $('#msg').html(txt);
    event.stopPropagation();  // 阻止事件冒泡
  });
  // 为body元素绑定click事件
  $("body").bind("click",function(){
    var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
    $('#msg').html(txt);
  });
})
</script>

event.stopPropagation(); // 阻止事件冒泡

有时候点击提交按钮会有一些默认事件。比如跳转到别的界面。但是如果没有通过验证的话,就不应该跳转。这时候可以通过设置event.preventDefault(); //阻止默认行为 ( 表单提交 )。

下面是案例:

<script type="text/javascript">
$(function(){
  $("#sub").bind("click",function(event){
     var username = $("#username").val(); //获取元素的值,val() 方法返回或设置被选元素的值。
     if(username==""){   //判断值是否为空
       $("#msg").html("<p>文本框的值不能为空.</p>"); //提示信息
       event.preventDefault(); //阻止默认行为 ( 表单提交 )
     }
  })
})
</script>

html部分:

<body>
<form action="test.html">
用户名:<input type="text" id="username" />
<br/>
<input type="submit" value="提交" id="sub"/>
</form>

<div id="msg"></div>
</body>

还有一种防止默认行为的方法就是return false。效果一样。

代码如下:

<script type="text/javascript">
$(function(){
  $("#sub").bind("click",function(event){
     var username = $("#username").val(); //获取元素的值
     if(username==""){   //判断值是否为空
       $("#msg").html("<p>文本框的值不能为空.</p>"); //提示信息
       return false;
     }
  })
})
</script>

同理,上面的冒泡事件也可以通过return false来处理。

<script type="text/javascript">
$(function(){
    // 为span元素绑定click事件
  $('span').bind("click",function(event){
    var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
    $('#msg').html(txt);
    return false;
  });
  // 为div元素绑定click事件
  $('#content').bind("click",function(event){
    var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
    $('#msg').html(txt);
    return false;
  });
  // 为body元素绑定click事件
  $("body").bind("click",function(){
    var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
    $('#msg').html(txt);
  });
})
</script>

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

Javascript 相关文章推荐
学习ExtJS Panel常用方法
Oct 07 Javascript
EasyUI 中 MenuButton 的使用方法
Jul 14 Javascript
JavaScript字符串对象substr方法入门实例(用于截取字符串)
Oct 16 Javascript
jQuery前端分页示例分享
Feb 10 Javascript
jquery实现网页的页面平滑滚动效果代码
Nov 02 Javascript
详解JavaScript函数对象
Nov 15 Javascript
js和jquery分别验证单选框、复选框、下拉框
Dec 17 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 Javascript
vue2 中如何实现动态表单增删改查实例
Jun 09 Javascript
vue实现带复选框的树形菜单
May 27 Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 24 Javascript
一定要知道的 25 个 Vue 技巧
Nov 02 Vue.js
30分钟快速掌握Bootstrap框架
May 24 #Javascript
JQuery 传送中文乱码问题的简单解决办法
May 24 #Javascript
深入理解jQuery中的事件冒泡
May 24 #Javascript
jQuery 弹出层插件(推荐)
May 24 #Javascript
基于jQuery实现仿QQ空间送礼物功能代码
May 24 #Javascript
深入理解JavaScript中为什么string可以拥有方法
May 24 #Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
May 23 #Javascript
You might like
phpinfo 系统查看参数函数代码
2009/06/05 PHP
PHP连接SQLServer2005 的问题解决方法
2010/07/19 PHP
PHP 数组基础知识小结
2010/08/20 PHP
表格展示无限级分类(PHP版)
2012/08/21 PHP
PHP实现手机归属地查询API接口实现代码
2012/08/27 PHP
php检测url是否存在的方法
2015/04/14 PHP
mouse_on_title.js
2006/08/25 Javascript
JS 显示当前日期与时间的代码
2010/03/24 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
js实现仿网易点击弹出提示同时背景变暗效果
2015/08/13 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
捕获未处理的Promise错误方法
2017/10/13 Javascript
详解如何优雅地在React项目中使用Redux
2017/12/28 Javascript
原生js实现拖拽功能基本思路详解
2018/04/18 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
Python实现将xml导入至excel
2015/11/20 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
使用python打印十行杨辉三角过程详解
2019/07/10 Python
Python OpenCV视频截取并保存实现代码
2019/11/30 Python
详解通过HTML5 Canvas实现图片的平移及旋转变化的方法
2016/03/22 HTML / CSS
俄罗斯优惠券网站:BIGLION
2017/05/21 全球购物
捷克汽车配件和工具销售网站:TorriaCars
2018/02/26 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
法国包包和行李箱销售网站:Bagage24.fr
2020/03/24 全球购物
电脑教师的教学自我评价
2013/11/26 职场文书
合伙协议书
2014/04/23 职场文书
推荐信格式范文
2014/05/09 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
2015医院个人工作总结范文
2015/05/21 职场文书
小学体育教学随笔
2015/08/14 职场文书