深入理解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 相关文章推荐
JavaScript 指导方针
Apr 05 Javascript
JS对外部文件的加载及对IFRMAME的加载的实现,当加载完成后,指定指向方法(方法回调)
Jul 04 Javascript
你必须知道的Javascript知识点之&quot;this指针&quot;的应用
Apr 23 Javascript
使用node.js 制作网站前台后台
Nov 13 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
Mar 09 Javascript
举例讲解JavaScript substring()的使用方法
Nov 09 Javascript
AngularJs表单验证实例详解
May 30 Javascript
JavaScript表单焦点自动切换代码
Jul 24 Javascript
jquery,js简单实现类似Angular.js双向绑定
Jan 13 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
Nov 22 Javascript
es5 类与es6中class的区别小结
Nov 09 Javascript
canvas多重阴影发光效果实现
Apr 20 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
ezSQL PHP数据库操作类库
2010/05/16 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
php url路由入门实例
2014/04/23 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
2015/09/30 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PHP实现求连续子数组最大和问题2种解决方法
2017/12/26 PHP
JQuery UI皮肤定制
2009/07/27 Javascript
javascript 简单抽屉效果的实现代码
2010/03/09 Javascript
jquery常用操作小结
2014/07/21 Javascript
JS获取字符串实际长度(包含汉字)的简单方法
2016/08/11 Javascript
JS对象深度克隆实例分析
2017/03/16 Javascript
JS正则表达式完美实现身份证校验功能
2017/10/18 Javascript
fetch 使用及如何接收JS传值
2017/11/11 Javascript
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
vue环形进度条组件实例应用
2018/10/10 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
ES6 新增的创建数组的方法(小结)
2019/08/01 Javascript
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
pandas 获取季度,月度,年度首尾日期的方法
2018/04/11 Python
python通过TimedRotatingFileHandler按时间切割日志
2019/07/17 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Python工程师必考的6个经典面试题
2020/06/28 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
德国综合购物网站:OTTO
2018/11/13 全球购物
全球最大的生存食品、水和装备专用在线市场:BePrepared.com
2020/01/02 全球购物
公司庆典邀请函范文
2014/01/13 职场文书
材料会计岗位职责
2014/03/06 职场文书
岗位职责怎么写
2014/03/14 职场文书
学生请假条格式
2014/04/11 职场文书
教师节感恩老师演讲稿
2014/08/28 职场文书
公司内部升职自荐信
2015/03/27 职场文书
经费申请报告
2015/05/15 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
2019中小学生安全过暑期倡议书
2019/06/24 职场文书