深入理解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客户端快捷键管理类的较完整实现和应用
Jun 08 Javascript
js单例模式的两种方案
Oct 22 Javascript
JavaScript中的console.log()函数详细介绍
Dec 29 Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 Javascript
javascript弹性运动效果简单实现方法
Jan 08 Javascript
Javascript获取统一管理的提示语(message)
Feb 03 Javascript
js一维数组、多维数组和对象的混合使用方法
Apr 03 Javascript
javascript冒泡排序小结
Apr 10 Javascript
js事件冒泡与事件捕获详解
Feb 20 Javascript
详解webpack的配置文件entry与output
Aug 21 Javascript
使用PreloadJS加载图片资源的基础方法详解
Feb 03 Javascript
浅析VUE防抖与节流
Nov 24 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
终于听上了直流胆调频
2021/03/02 无线电
使用PHP socke 向指定页面提交数据
2008/07/23 PHP
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
php中随机函数mt_rand()与rand()性能对比分析
2014/12/01 PHP
PHP之十六个魔术方法详细介绍
2016/11/01 PHP
PHP编程获取各个时间段具体时间的方法
2017/05/26 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
js编写trim()函数及正则表达式的运用
2013/10/24 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
javascript弹出带文字信息的提示框效果
2016/07/19 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
Angular搜索场景中使用rxjs的操作符处理思路
2018/05/30 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
利用vue-i18n实现多语言切换效果的方法
2019/06/19 Javascript
jquery实现垂直手风琴菜单
2020/03/04 jQuery
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
vue 使用饿了么UI仿写teambition的筛选功能
2021/03/01 Vue.js
[06:53]2018DOTA2国际邀请赛寻真——勇于创新的Vici Gaming
2018/08/14 DOTA
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
fastcgi文件读取漏洞之python扫描脚本
2017/04/23 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
Python判断对象是否相等及eq函数的讲解
2019/02/25 Python
HTML5 canvas基本绘图之绘制线条
2016/06/27 HTML / CSS
Paradox London官方网站:英国新娘鞋婚礼鞋品牌
2019/08/29 全球购物
自我评价怎么写正确呢?
2013/12/02 职场文书
教师产假请假条
2014/04/10 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python