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 相关文章推荐
一个刚完成的layout(拖动流畅,不受iframe影响)
Aug 17 Javascript
一个关于javascript匿名函数的问题分析
Mar 30 Javascript
判断javascript的数据类型(示例代码)
Dec 11 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
Oct 13 Javascript
JS禁止查看网页源代码的实现方法
Oct 12 Javascript
vue.js实现表格合并示例代码
Nov 30 Javascript
node.js请求HTTPS报错:UNABLE_TO_VERIFY_LEAF_SIGNATURE\的解决方法
Dec 18 Javascript
Vue SPA单页应用首屏优化实践
Jun 28 Javascript
JavaScript实现单英文金山打字通
Jul 24 Javascript
微信小程序 可搜索的地址选择实现详解
Aug 28 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
Nov 09 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
Oct 31 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下常用正则表达式整理
2010/10/26 PHP
修改php.ini以达到屏蔽错误信息并记录日志
2013/06/16 PHP
网站防止被刷票的一些思路与方法
2015/01/08 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
2015/06/23 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
PHP实现的微信公众号扫码模拟登录功能示例
2019/05/30 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
推荐 21 款优秀的高性能 Node.js 开发框架
2014/08/18 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
基于Bootstrap的后台管理面板 Bootstrap Metro Dashboard
2016/06/17 Javascript
详解React中的组件通信问题
2017/07/31 Javascript
详解 vue.js用法和特性
2017/10/15 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
2017/12/25 jQuery
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
vue实现文件上传功能
2018/08/13 Javascript
python实现在windows服务中新建进程的方法
2015/06/30 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
Python基于xlrd模块操作Excel的方法示例
2018/06/21 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
韩国美国时尚服装和美容在线全球市场:KOODING
2018/11/07 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
农村婚礼证婚词
2014/01/10 职场文书
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
两只小狮子教学反思
2014/02/05 职场文书
优秀党员推荐材料
2014/12/18 职场文书
付款承诺函范文
2015/01/21 职场文书
大学生党员自我评价
2015/03/04 职场文书
浅谈redis缓存在项目中的使用
2021/05/20 Redis
Java 中的 Unsafe 魔法类的作用大全
2021/06/26 Java/Android
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang