利用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 禁用浏览器的后退功能的简单方法
Dec 10 Javascript
将CKfinder整合进CKEditor3.0的新方法
Jan 10 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
Aug 22 Javascript
jquery中show()、hide()和toggle()用法实例
Jan 15 Javascript
jquery validate demo 基础
Oct 29 Javascript
ExtJS 4.2 Grid组件单元格合并的方法
Oct 12 Javascript
textarea 在浏览器中固定大小和禁止拖动的实现方法
Dec 03 Javascript
菊花转动的jquery加载动画效果
Aug 19 jQuery
微信小程序使用websocket通讯的demo,含前后端代码,亲测可用
May 22 Javascript
Vue页面切换和a链接的本质区别详解
Nov 12 Javascript
JQuery事件冒泡和默认行为代码实例
May 13 jQuery
jQuery开发仿QQ版音乐播放器
Jul 10 jQuery
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 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php下删除一篇文章生成的多个静态页面
2010/08/08 PHP
php版微信公众平台开发之验证步骤实例详解
2016/09/23 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
PHP实现限制域名访问的实现代码(本地验证)
2020/09/13 PHP
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
js实现鼠标点击左上角滑动菜单效果代码
2015/09/06 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
小程序实现多个选项卡切换
2020/06/19 Javascript
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python实现识别手写数字 简易图片存储管理系统
2018/01/29 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
set在python里的含义和用法
2019/06/24 Python
python搜索包的路径的实现方法
2019/07/19 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
python如何随机生成高强度密码
2020/08/19 Python
python re的findall和finditer的区别详解
2020/11/15 Python
德国购买门票网站:ADticket.de
2019/10/31 全球购物
几个MySql的面试题
2013/04/22 面试题
员工自我鉴定
2013/10/09 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
国家机关领导干部民主生活会对照检查材料思想汇报
2014/09/17 职场文书
教师自我剖析材料(群众路线)
2014/09/29 职场文书
2014年少先队工作总结
2014/12/03 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
毕业生评语大全
2015/01/04 职场文书
新郎接新娘保证书
2015/05/08 职场文书