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 相关文章推荐
JavaScript创建命名空间(namespace)的最简实现
Dec 11 Javascript
走出JavaScript初学困境—js初学
Dec 29 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
Nov 21 Javascript
jquery验证邮箱格式是否正确实例讲解
Nov 16 Javascript
Vue.js 递归组件实现树形菜单(实例分享)
Dec 21 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
JS中移除非数字最多保留一位小数
May 09 Javascript
详解vscode中vue代码颜色插件
Oct 11 Javascript
优化Vue项目编译文件大小的方法步骤
May 27 Javascript
微信小程序服务器日期格式化问题
Jan 07 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
Mar 20 jQuery
Array.filter中如何正确使用Async
Nov 04 Javascript
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
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
PHP实现动态柱状图改进版
2015/03/30 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
PHP基于PDO实现的SQLite操作类【包含增删改查及事务等操作】
2017/06/21 PHP
PHP7引入的&quot;??&quot;和&quot;?:&quot;的区别讲解
2019/04/08 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
img标签中onerror用法
2009/08/13 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
javascript中局部变量和全局变量的区别详解
2015/02/27 Javascript
微信企业号开发之微信考勤Cookies的使用
2015/09/11 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
使用vuepress搭建静态博客的示例代码
2019/02/14 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
numpy使用技巧之数组过滤实例代码
2018/02/03 Python
基于Python实现用户管理系统
2019/02/26 Python
详解python中@的用法
2019/03/27 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
Pandas时间序列重采样(resample)方法中closed、label的作用详解
2019/12/10 Python
为什么说python适合写爬虫
2020/06/11 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
python如何操作mysql
2020/08/17 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
请说出以下代码输出什么
2013/08/30 面试题
建筑个人求职信范文
2014/01/25 职场文书
2014乡镇干部对照检查材料思想汇报
2014/09/26 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
考研英语复习计划
2015/01/19 职场文书
幼儿园中班教育随笔
2015/08/14 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
用JS实现飞机大战小游戏
2021/06/09 Javascript
Java中使用Filter过滤器的方法
2021/06/28 Java/Android