利用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据option的value值快速设定初始的selected选项
Aug 13 Javascript
jquery ready函数源代码研究
Dec 06 Javascript
关于全局变量和局部变量的那些事
Jan 11 Javascript
深入浅出ES6新特性之函数默认参数和箭头函数
Aug 01 Javascript
JS实现title标题栏文字不间断滚动显示效果
Sep 07 Javascript
Bootstrap modal 多弹窗之叠加显示不出弹窗问题的解决方案
Feb 23 Javascript
JavaScript实现动态添加Form表单元素的方法示例
Aug 14 Javascript
JavaScript简单实现合并两个Json对象的方法示例
Oct 16 Javascript
解析Vue2 dist 目录下各个文件的区别
Nov 22 Javascript
JavaScript伪数组用法实例分析
Dec 22 Javascript
JS实现字符串翻转的方法分析
Aug 31 Javascript
layui的layedit富文本赋值方法
Sep 18 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利用imagick生成组合缩略图
2016/02/19 PHP
php中的登陆login实例代码
2016/06/20 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
2018/04/21 PHP
一直复略了的一个问题,关于表单重复提交
2007/02/15 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
浅析Bootstrip的select控件绑定数据的问题
2016/05/10 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
C#实现将一个字符转换为整数
2017/12/12 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
JS实现数组去重,显示重复元素及个数的方法示例
2019/01/21 Javascript
在VUE中实现文件下载并判断状态的方法
2019/11/08 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
swiperjs实现导航与tab页的联动
2020/12/13 Javascript
Python算法之图的遍历
2017/11/16 Python
Python对List中的元素排序的方法
2018/04/01 Python
如何使用Python的Requests包实现模拟登陆
2018/04/27 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
Python sorted对list和dict排序
2020/06/09 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
旅游网创业计划书
2014/01/31 职场文书
年度考核个人总结
2015/03/06 职场文书
房地产项目合作意向书
2015/05/08 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
博物馆观后感
2015/06/05 职场文书
2016新年致辞
2015/08/01 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
2016年教师党员创先争优承诺书
2016/03/24 职场文书