jQuery阻止事件冒泡具体实现


Posted in Javascript onOctober 11, 2013

下面是html代码部分:

<body>
<div id="content">
    外层div元素
    <span>内层span元素</span>
    外层div元素
</div>
<div id="msg"></div>
</body>

对应的jQuery代码如下:

<script type="text/javascript">
$(function(){
    // 为span元素绑定click事件
    $('span').bind("click",function(){
        var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";//获取html信息
        $('#msg').html(txt);// 设置html信息
    });
    // 为div元素绑定click事件
    $('#content').bind("click",function(){
        var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
        $('#msg').html(txt);
    });
    // 为body元素绑定click事件
    $("body").bind("click",function(){
        var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
        $('#msg').html(txt);
    });
})
</script>

当点击span时,会触发div与body 的点击事件。点击div时会触发body的点击事件。

如何防止这种冒泡事件发生呢?

修改如下:

<script type="text/javascript">
$(function(){
       // 为span元素绑定click事件
    $('span').bind("click",function(event){
        var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
        $('#msg').html(txt);
        event.stopPropagation();    //  阻止事件冒泡
    });
    // 为div元素绑定click事件
    $('#content').bind("click",function(event){
        var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
        $('#msg').html(txt);
        event.stopPropagation();    //  阻止事件冒泡
    });
    // 为body元素绑定click事件
    $("body").bind("click",function(){
        var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
        $('#msg').html(txt);
    });
})
</script>

event.stopPropagation(); // 阻止事件冒泡

有时候点击提交按钮会有一些默认事件。比如跳转到别的界面。但是如果没有通过验证的话,就不应该跳转。这时候可以通过设置event.preventDefault(); //阻止默认行为 ( 表单提交 )。

下面是案例:

<script type="text/javascript">
$(function(){
   $("#sub").bind("click",function(event){
         var username = $("#username").val();  //获取元素的值,val() 方法返回或设置被选元素的值。
         if(username==""){     //判断值是否为空
             $("#msg").html("<p>文本框的值不能为空.</p>");  //提示信息
             event.preventDefault();  //阻止默认行为 ( 表单提交 )
         }
   })
})
</script>

html部分:

<body>
<form action="test.html">
用户名:<input type="text" id="username" />
<br/>
<input type="submit" value="提交" id="sub"/>
</form>
<div id="msg"></div>
</body>

还有一种防止默认行为的方法就是return false。效果一样。

代码如下:

<script type="text/javascript">
$(function(){
   $("#sub").bind("click",function(event){
         var username = $("#username").val();  //获取元素的值
         if(username==""){     //判断值是否为空
             $("#msg").html("<p>文本框的值不能为空.</p>");  //提示信息
             return false;
         }
   })
})
</script>

同理,上面的冒泡事件也可以通过return false来处理。

<script type="text/javascript">
$(function(){
       // 为span元素绑定click事件
    $('span').bind("click",function(event){
        var txt = $('#msg').html() + "<p>内层span元素被点击.<p/>";
        $('#msg').html(txt);
        return false;
    });
    // 为div元素绑定click事件
    $('#content').bind("click",function(event){
        var txt = $('#msg').html() + "<p>外层div元素被点击.<p/>";
        $('#msg').html(txt);
        return false;
    });
    // 为body元素绑定click事件
    $("body").bind("click",function(){
        var txt = $('#msg').html() + "<p>body元素被点击.<p/>";
        $('#msg').html(txt);
    });
})
</script>
Javascript 相关文章推荐
caller和callee的区别介绍及演示结果
Mar 10 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
Apr 24 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
Apr 15 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
May 21 Javascript
iframe调用父页面函数示例详解
Jul 17 Javascript
JavaScript中的return语句简单介绍
Dec 07 Javascript
jQuery 限制输入字符串长度
Jun 20 Javascript
jquery实现页面加载效果
Feb 21 Javascript
AngularJS 表单验证手机号的实例(非必填)
Nov 12 Javascript
Angular利用trackBy提升性能的方法
Jan 26 Javascript
探索浏览器页面关闭window.close()的使用详解
Aug 21 Javascript
如何在 Vue 表单中处理图片
Jan 26 Vue.js
JS定时器实例详细分析
Oct 11 #Javascript
jquery 清空file域示例(兼容个浏览器)
Oct 11 #Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
Oct 11 #Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
Oct 11 #Javascript
Js base64 加密解密介绍
Oct 11 #Javascript
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
Oct 11 #Javascript
js定时器怎么写?就是在特定时间执行某段程序
Oct 11 #Javascript
You might like
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
2014/06/12 PHP
PHP之header函数详解
2021/03/02 PHP
jQuery操作input type=radio的实现代码
2012/06/14 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
2015/02/10 Javascript
cookie的secure属性详解
2015/04/08 Javascript
很棒的一组js图片轮播特效
2017/01/12 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
Webpack常见静态资源处理-模块加载器(Loaders)+ExtractTextPlugin插件
2017/06/29 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
JS/HTML5游戏常用算法之路径搜索算法 随机迷宫算法详解【普里姆算法】
2018/12/13 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
JS变量提升原理与用法实例浅析
2020/05/22 Javascript
[01:57]2016完美“圣”典风云人物:国士无双专访
2016/12/04 DOTA
解读Python中degrees()方法的使用
2015/05/18 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
python自动化UI工具发送QQ消息的实例
2019/08/27 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
使用PyTorch实现MNIST手写体识别代码
2020/01/18 Python
new_zeros() pytorch版本的转换方式
2020/02/18 Python
Python3 hashlib密码散列算法原理详解
2020/03/30 Python
解决import tensorflow导致jupyter内核死亡的问题
2021/02/06 Python
css3 transform属性详解
2014/09/30 HTML / CSS
南威尔士家居商店:Leekes
2016/10/25 全球购物
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
C语言开发工程师测试题
2016/12/20 面试题
六一文艺汇演开幕词
2015/01/29 职场文书
实习推荐信格式模板
2015/03/27 职场文书
放假通知范文
2015/04/14 职场文书
入党积极分子群众意见
2015/06/01 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
Python基础之字符串格式化详解
2021/04/21 Python
MySQL如何构建数据表索引
2021/05/13 MySQL
Pytorch中的学习率衰减及其用法详解
2021/06/05 Python
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS