深入理解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 相关文章推荐
jQuery 树形结构的选择器
Feb 15 Javascript
ASP.NET中基于JQUERY的高性能的TreeView补充
Feb 23 Javascript
使用jQuery快速解决input中placeholder值在ie中无法支持的问题
Jan 02 Javascript
Javascript异步编程模型Promise模式详细介绍
May 08 Javascript
javascript实现textarea中tab键的缩排处理方法
Jun 26 Javascript
Javascript removeChild()删除节点及删除子节点的方法
Dec 27 Javascript
vue中渐进过渡效果实现
Oct 27 Javascript
javascript验证香港身份证的格式或真实性
Feb 07 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
Mar 08 Javascript
微信小程序开发入门基础教程
Apr 19 Javascript
vue实现全选和反选功能
Aug 31 Javascript
Angular使用动态加载组件方法实现Dialog的示例
May 11 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
配置最新的PHP加MYSQL服务器
2006/10/09 PHP
杏林同学录(二)
2006/10/09 PHP
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
Yii 2.0如何使用页面缓存方法示例
2017/05/23 PHP
php如何实现数据库的备份和恢复
2020/11/30 PHP
将函数的实际参数转换成数组的方法
2010/01/25 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
javascript实现点击单选按钮链接转向对应网址的方法
2015/08/12 Javascript
深入浅析search 搜索框的写法
2016/08/02 Javascript
jquery 点击元素后,滚动条滚动至该元素位置的方法
2016/08/05 Javascript
javascript验证手机号和实现星号(*)代替实例
2016/08/16 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
详解angular如何调用HTML字符串的方法
2018/06/30 Javascript
OpenLayers3加载常用控件使用方法详解
2020/09/25 Javascript
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
简单介绍Python下自己编写web框架的一些要点
2015/04/29 Python
python 爬取微信文章
2016/01/30 Python
python基础之入门必看操作
2017/07/26 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python实现多人聊天室
2020/03/31 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
在DELPHI中调用存储过程和使用内嵌SQL哪种方式更好
2016/11/22 面试题
程序员岗位职责
2013/11/11 职场文书
2014旅游局领导班子四风问题对照检查材料思想汇报
2014/09/19 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
MySQL 8.0 之不可见列的基本操作
2021/05/20 MySQL
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python
基于Redission的分布式锁实战
2022/08/14 Redis