利用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 相关文章推荐
基于jquery的气泡提示效果
May 31 Javascript
javascript图像处理—仿射变换深度理解
Jan 16 Javascript
javascript的数组和常用函数详解
May 09 Javascript
JavaScript数组去重的五种方法
Nov 05 Javascript
JavaScript中eval()函数用法详解
Dec 14 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
Dec 14 Javascript
jquery实现多次上传同一张图片
Jan 09 Javascript
JavaScript Canvas绘制圆形时钟效果
Aug 20 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
Jun 05 Javascript
浅谈如何使用webpack构建多页面应用
May 30 Javascript
TypeScript中的方法重载详解
Apr 12 Javascript
VUE Elemen-ui之穿梭框使用方法详解
Jan 19 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
虹吸式咖啡壶操作
2021/03/03 冲泡冲煮
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
php实现的二分查找算法示例
2017/06/20 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
JavaScript实现的经典文件树菜单效果
2015/09/08 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
JavaScript实现京东放大镜效果
2019/12/03 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
Python实例分享:快速查找出被挂马的文件
2014/06/08 Python
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
python递归计算N!的方法
2015/05/05 Python
Python面向对象特殊成员
2017/04/24 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
tornado+celery的简单使用详解
2019/12/21 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
a标签下载链接的简单实现
2016/09/13 HTML / CSS
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
一些Unix笔试题和面试题
2012/09/25 面试题
优秀团员个人的自我评价
2013/10/02 职场文书
初中生期末考试的自我评价
2013/12/17 职场文书
2014感恩节演讲稿大全
2014/10/11 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
离婚协议书范文2015
2015/01/26 职场文书
工作自我评价范文
2019/03/21 职场文书
WebWorker 封装 JavaScript 沙箱详情
2021/11/02 Javascript
Python面试不修改数组找出重复的数字
2022/05/20 Python