深入理解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 相关文章推荐
浅说js变量
May 25 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
May 06 Javascript
JS动态添加与删除select中的Option对象(示例代码)
Dec 25 Javascript
JavaScript Serializer序列化时间处理示例
Jul 31 Javascript
javascript简单实现图片预加载
Dec 03 Javascript
jQuery实现带渐显效果的人物多级关系图代码
Oct 16 Javascript
js简单时间比较的方法
Aug 02 Javascript
JavaScript判断数组是否存在key的简单实例
Aug 03 Javascript
利用vscode编写vue的简单配置详解
Jun 17 Javascript
完美解决axios在ie下的兼容性问题
Mar 05 Javascript
简述vue路由打开一个新的窗口的方法
Nov 29 Javascript
Vue中函数防抖节流的理解及应用实现
Apr 24 Javascript
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
1.PHP简介
2006/10/09 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
jquery attr 设定src中含有&amp;(宏)符号问题的解决方法
2011/07/26 Javascript
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
jquery实现根据浏览器窗口大小自动缩放图片的方法
2015/07/17 Javascript
JavaScript电子时钟倒计时第二款
2016/01/10 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
H5上传本地图片并预览功能
2017/05/08 Javascript
yarn的使用与升级Node.js的方法详解
2017/06/04 Javascript
Vue实例中生命周期created和mounted的区别详解
2017/08/25 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python自定义主从分布式架构实例分析
2016/09/19 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
pyqt5移动鼠标显示坐标的方法
2019/06/21 Python
利用django model save方法对未更改的字段依然进行了保存
2020/03/28 Python
Python pysnmp使用方法及代码实例
2020/08/24 Python
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
土耳其家居建材网站:Koçtaş
2016/11/22 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
三好学生自我鉴定
2013/12/17 职场文书
优秀学生自我鉴定范例
2013/12/18 职场文书
师德师风自我剖析材料
2014/09/27 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
2015年采购员工作总结
2015/04/27 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS
tp5使用layui实现多个图片上传(带附件选择)的方法实例
2021/11/17 PHP
JS class语法糖的深入剖析
2022/07/07 Javascript