利用JQuery阻止事件冒泡


Posted in Javascript onDecember 01, 2016

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

我们在平时的开发过程中,肯定会遇到在一个div(这个div可以是元素)包裹一个div的情况,但是呢,在这两个div上都添加了事件,如果点击里面的div我们希望处理这个div的事件,但是呢,我们不希望外层的div的事件也执行,这时候我们就要用到阻止冒泡。

通俗点来说吧,你在家里看电视,躲在自己的小房间,但是你不希望声音传到隔壁父母的耳朵里,这时候,你可能躲在被窝里,或者墙壁的隔音效果很好,阻隔声音可以理解为阻止冒泡。

<style>
 #content{
  width: 140px;
  border: 1px solid blue;
 }
 #msg{
  width: 100px;
  height: 100px;
  margin: 20px;
  border: 1px solid red;
 }
</style>
<body>
  <div id="content">
 外层div
 <div id="msg">
  内层div
 </div>
 </div>

</body>

显示结果

利用JQuery阻止事件冒泡

对应的jQuery代码如下:

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
 <script type="text/javascript">
 $(function(){
 // 为内层div绑定click事件
 $("#msg").click(function(){
  alert("我是小div");
 });
 // 为外层div元素绑定click事件
 $("#content").click(function(){
  alert("我是大div");
 });
 // 为body元素绑定click事件
 $("body").click(function(){
  alert("我是body");
 });
 });
 </script>

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

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

修改如下:

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

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

html部分

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

利用JQuery阻止事件冒泡

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

//阻止默认行为 ( 表单提交 )
                    event.preventDefault(); 
还有一种防止默认行为的方法就是return false。效果一样。

代码如下:

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

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

<script type="text/javascript" src="js/jquery-1.8.3.js"></script>
 <script type="text/javascript">
 $(function(){
 // 为内层div绑定click事件
 $("#msg").click(function(event){
  alert("我是小div");
  //event.stopPropagation(); // 阻止事件冒泡
  return false;
 });
 // 为外层div元素绑定click事件
 $("#content").click(function(event){
  alert("我是大div");
  //event.stopPropagation(); // 阻止事件冒泡
   return false;
 });
 // 为body元素绑定click事件
 $("body").click(function(event){
  alert("我是body");
  //event.stopPropagation(); // 阻止事件冒泡
  return false;
 });
 });

以上就是本文的全部内容,希望对大家有所帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
js获取元素在浏览器中的绝对位置
Jul 24 Javascript
JS声明变量背后的编译原理剖析
Dec 28 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
Jan 22 Javascript
jQuery操作表单常用控件方法小结
Mar 23 Javascript
js生成验证码并直接在前端判断
May 15 Javascript
JavaScript中setUTCFullYear()方法的使用简介
Jun 12 Javascript
一分钟理解js闭包
May 04 Javascript
js获取Html元素的实际宽度高度的方法
May 19 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
深入理解Vue Computed计算属性原理
May 29 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
Mar 26 Javascript
H5+css3+js搭建带验证码的登录页面
Oct 11 Javascript
Vue.js第三天学习笔记(计算属性computed)
Dec 01 #Javascript
实例解析jQuery中如何取消后续执行内容
Dec 01 #Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
Dec 01 #Javascript
jQuery中ajax错误调试分析
Dec 01 #Javascript
JQuery学习总结【二】
Dec 01 #Javascript
Vue.js第二天学习笔记(vue-router)
Dec 01 #Javascript
JavaScript给每一个li节点绑定点击事件的实现方法
Dec 01 #Javascript
You might like
php的ajax简单实例
2014/02/27 PHP
PHP获取QQ达人QQ信息的方法
2015/03/05 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
JS实现浏览器菜单命令
2006/09/05 Javascript
javascript基本语法分析说明
2008/06/15 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
javascript 通用简单的table选项卡实现
2010/05/07 Javascript
JS实现随机数生成算法示例代码
2013/08/08 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
JavaScript中使用Math.floor()方法对数字取整
2015/06/15 Javascript
javascript实现的淘宝旅行通用日历组件用法实例
2015/08/03 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
javascript设计模式之Adapter模式【适配器模式】实现方法示例
2017/01/13 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
Python函数可变参数定义及其参数传递方式实例详解
2015/05/25 Python
Python实现将罗马数字转换成普通阿拉伯数字的方法
2017/04/19 Python
Django 实现下载文件功能的示例
2018/03/06 Python
Django实现基于类的分页功能
2019/10/31 Python
python 用 xlwings 库 生成图表的操作方法
2019/12/22 Python
TensorFlow2.0使用keras训练模型的实现
2021/02/20 Python
详解CSS3:overflow属性
2020/11/17 HTML / CSS
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
资深财务管理人员自我评价
2013/09/22 职场文书
预备党员转正思想汇报
2014/01/12 职场文书
投标邀请书范文
2014/01/31 职场文书
工作决心书范文
2014/03/11 职场文书
青年教师师德演讲稿
2014/08/26 职场文书
银行竞聘报告范文
2014/11/06 职场文书
2015年考研复习计划
2015/01/19 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
工会经费申请报告
2015/05/15 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书