利用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语言的思想前提想学习js的朋友可以看看
Apr 01 Javascript
Js setInterval与setTimeout(定时执行与循环执行)的代码(可以传入参数)
Jun 11 Javascript
动态读取JSON解析键值对的方法
Jun 03 Javascript
使用jquery解析XML示例代码
Sep 05 Javascript
vue.js将unix时间戳转换为自定义时间格式
Jan 03 Javascript
jQuery自定义元素右键点击事件(实现案例)
Apr 28 jQuery
Vue父子组件双向绑定传值的实现方法
Jul 31 Javascript
vue项目使用.env文件配置全局环境变量的方法
Oct 24 Javascript
Vue项目中Api的组织和返回数据处理的操作
Nov 04 Javascript
Angular8引入百度Echarts进行图表分析的实现代码
Nov 27 Javascript
vue实现导航菜单和编辑文本的示例代码
Jul 04 Javascript
vant picker+popup 自定义三级联动案例
Nov 04 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
文件上传类
2006/10/09 PHP
PHP 开发工具
2006/12/06 PHP
PHP学习之数组的定义和填充
2011/04/17 PHP
php设计模式之简单工厂模式详解
2014/09/04 PHP
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
JS闭包的几种常见形式实例详解
2017/09/16 Javascript
vue计算属性时v-for处理数组时遇到的一个bug问题
2018/01/21 Javascript
详解vue指令与$nextTick 操作DOM的不同之处
2018/08/02 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
js实现坦克移动小游戏
2019/10/28 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
Python3.5模块的定义、导入、优化操作图文详解
2019/04/27 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
2020/02/15 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
详解基于python的全局与局部序列比对的实现(DNA)
2020/10/07 Python
CSS3 calc()会计算属性详解
2018/02/27 HTML / CSS
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
数据库连接池的工作原理
2012/09/26 面试题
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
个人函授自我鉴定
2014/03/25 职场文书
大三学习计划书范文
2014/05/02 职场文书
赡养老人协议书范本
2015/08/06 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
Go语言-为什么返回值为接口类型,却返回结构体
2021/04/24 Golang