利用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效果
Mar 05 Javascript
javascript回车完美实现tab切换功能
Mar 13 Javascript
淘宝网提供的国内NPM镜像简介和使用方法
Apr 17 Javascript
jQuery随机密码生成的方法
Mar 09 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
Jun 15 Javascript
js clearInterval()方法的定义和用法
Nov 11 Javascript
Node.js程序中的本地文件操作用法小结
Mar 06 Javascript
详解javascript中的babel到底是什么
Jun 21 Javascript
vue使用Google地图的实现示例代码
Dec 19 Javascript
JavaScript实现左右滚动电影画布
Feb 06 Javascript
vue 函数调用加括号与不加括号的区别
Oct 29 Javascript
antdesign-vue结合sortablejs实现两个table相互拖拽排序功能
Jan 08 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
php快递单号查询接口使用示例
2014/05/05 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
thinkPHP+mysql+ajax实现的仿百度一下即时搜索效果详解
2019/07/15 PHP
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
cnblogs 代码高亮显示后的代码复制问题解决实现代码
2011/12/14 Javascript
javasctipt如何显示几分钟前、几天前等
2014/04/30 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
javascript实现简单的二级联动
2015/03/19 Javascript
浅析Bootstrap缩略图组件与警示框组件
2016/04/29 Javascript
canvas实现图像截取功能
2017/02/06 Javascript
Javascript继承机制详解
2017/05/30 Javascript
JavaScript基本语法_动力节点Java学院整理
2017/06/26 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
JS实现根据详细地址获取经纬度功能示例
2019/04/16 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
js实现抽奖功能
2020/11/24 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
Python中字典创建、遍历、添加等实用操作技巧合集
2015/06/02 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
python实现比较文件内容异同
2018/06/22 Python
Pycharm新手教程(只需要看这篇就够了)
2019/06/18 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
Envie de Fraise意大利:法国网上推出的孕妇装品牌
2020/10/18 全球购物
linux面试题参考答案(6)
2014/08/29 面试题
String s = new String(“xyz”);创建了几个String Object?
2015/08/05 面试题
2014元旦晚会策划方案
2014/02/19 职场文书
报告会主持词
2014/04/02 职场文书
2014年纪委工作总结
2014/12/05 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript
python3中apply函数和lambda函数的使用详解
2022/02/28 Python