利用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 相关文章推荐
使用javascript实现页面定时跳转总结篇
Sep 21 Javascript
JS分页效果示例
Oct 11 Javascript
做好七件事帮你提升jQuery的性能
Feb 06 Javascript
Javascript实现获取窗口的大小和位置代码分享
Dec 04 Javascript
Node.js 学习笔记之简介、安装及配置
Mar 03 Javascript
浅谈javascript中call()、apply()、bind()的用法
Apr 20 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
Aug 18 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
Aug 15 Javascript
Vue实现内部组件轮播切换效果的示例代码
Apr 07 Javascript
three.js 将图片马赛克化的示例代码
Jul 31 Javascript
浅谈在vue-cli3项目中解决动态引入图片img404的问题
Aug 04 Javascript
vue+iview分页组件的封装
Nov 17 Vue.js
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中的日期处理方法集锦
2007/01/02 PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
2013/03/26 PHP
PHP操作MySQL的mysql_fetch_* 函数的常见用法教程
2015/12/25 PHP
php微信公众号开发模式详解
2016/11/28 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
jQuery简单实现图片预加载
2015/04/20 Javascript
jQuery获取字符串中出现最多的数
2016/02/22 Javascript
nodeJS删除文件方法示例
2016/12/25 NodeJs
详解Angular的内置过滤器和自定义过滤器【推荐】
2016/12/26 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
微信小程序实现图片上传、删除和预览功能的方法
2017/12/18 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
python实现读Excel写入.txt的方法
2018/04/29 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
python zip()函数使用方法解析
2019/10/31 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
Python3+Selenium+Chrome实现自动填写WPS表单
2020/02/12 Python
美国排名第一的在线葡萄酒商店:Wine.com
2016/09/07 全球购物
美国复古街头服饰精品店:Need Supply Co.
2017/02/22 全球购物
关于赌博的检讨书
2014/01/08 职场文书
2014信息公开实施方案
2014/02/22 职场文书
预备党员公开承诺书
2014/05/28 职场文书
五五普法心得体会
2014/09/04 职场文书
学位证书委托书
2014/09/30 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
2015年机关作风和效能建设工作总结
2015/07/23 职场文书
导游词之青城山景区
2019/09/27 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏
Java8利用Stream对列表进行去除重复的方法详解
2022/04/14 Java/Android