利用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 相关文章推荐
不能再简单的无闪刷新验证码原理很简单
Nov 05 Javascript
jQuery 入门讲解1
Apr 15 Javascript
Jquery知识点三 jquery表单对象操作
Jan 17 Javascript
JavaScript汉诺塔问题解决方法
Apr 21 Javascript
jQuery实现的多屏图像图层切换效果实例
May 07 Javascript
详解webpack介绍&amp;安装&amp;常用命令
Jun 29 Javascript
React Native 集成jpush-react-native的示例代码
Aug 16 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
Sep 06 Javascript
ES6知识点整理之模块化的应用详解
Apr 15 Javascript
在react中使用vue的状态管理的方法示例
May 02 Javascript
vue+elementUI实现简单日历功能
Sep 24 Javascript
vue实现拖拽交换位置
Apr 07 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
ajax+php打造进度条代码[readyState各状态说明]
2010/04/12 PHP
php下连接mssql2005的代码
2011/01/17 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
2012/04/09 PHP
PHP实现的sqlite数据库连接类
2014/12/12 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
PHP连接MYSQL数据库的3种常用方法
2017/02/27 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
js实现点击注册按钮开始读秒倒计时的小例子
2013/05/11 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
jQuery实现等比例缩放大图片让大图片自适应页面布局
2013/10/16 Javascript
浅谈javascript 函数属性和方法
2015/01/21 Javascript
javascript实现复选框超过限制即弹出警告框的方法
2015/02/25 Javascript
JavaScript中计算网页中某个元素的位置
2015/06/10 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
Node.JS 循环递归复制文件夹目录及其子文件夹下的所有文件
2017/09/18 Javascript
Three.js开发实现3D地图的实践过程总结
2017/11/20 Javascript
JavaScript基础心法 数据类型
2018/03/05 Javascript
vue中如何实现后台管理系统的权限控制的方法示例
2018/09/19 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
python 自定义异常和异常捕捉的方法
2018/10/18 Python
Python使用正则表达式实现爬虫数据抽取
2020/08/17 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
html5调用app分享功能示例(WebViewJavascriptBridge)
2018/03/21 HTML / CSS
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
初入社会应届生求职信
2013/11/18 职场文书
销售主管竞聘书
2014/03/31 职场文书
《登鹳雀楼》教学反思
2014/04/09 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书