利用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工具_Form 封装
Aug 21 Javascript
WEB页子窗口(showModalDialog和showModelessDialog)使用说明
Oct 25 Javascript
通过js来制作复选框的全选和不选效果
May 22 Javascript
node.js中的querystring.stringify方法使用说明
Dec 10 Javascript
JQuery标签页效果的两个实例讲解(4)
Sep 17 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
Jun 17 Javascript
Highcharts入门之简介
Aug 02 Javascript
JavaScript实现页面无操作倒计时退出
Oct 22 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
Apr 18 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
Mar 07 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
May 10 Javascript
从零撸一个pc端vue的ui组件库( 计数器组件 )
Aug 08 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php基础教程 php内置函数实例教程
2012/08/21 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
php连接微软MSSQL(sql server)完全攻略
2016/11/27 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
jQuery html()等方法介绍
2009/11/18 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
jquery固定底网站底部菜单效果
2013/08/13 Javascript
基于jQuery实现拖拽图标到回收站并删除功能
2015/11/25 Javascript
Bootstrap使用基础教程详解
2016/09/05 Javascript
详解JavaScript权威指南之对象
2016/09/27 Javascript
ES6 Symbol数据类型的应用实例分析
2019/06/26 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
jQuery实现获取多选框的值示例
2020/02/07 jQuery
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日小组赛B组Effect VS Secret
2018/03/30 DOTA
用Python的Django框架完成视频处理任务的教程
2015/04/02 Python
python获取mp3文件信息的方法
2015/06/15 Python
python妙用之编码的转换详解
2017/04/21 Python
Python3自动签到 定时任务 判断节假日的实例
2018/11/13 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
在python环境下运用kafka对数据进行实时传输的方法
2018/12/27 Python
Python测试模块doctest使用解析
2019/08/10 Python
Django中提示消息messages的设置方式
2019/11/15 Python
PyCharm 在Windows的有用快捷键详解
2020/04/07 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
使用CSS3来实现滚动视差效果的教程
2015/08/24 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
美国在线家具网站:GDFStudio
2021/03/13 全球购物
环卫工人节活动总结
2014/08/29 职场文书
教师三严三实对照检查材料
2014/09/25 职场文书
开平碉楼导游词
2015/02/06 职场文书
Django REST framework 限流功能的使用
2021/06/24 Python