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 相关文章推荐
JQuery,Extjs,YUI,Prototype,Dojo 等JS框架的区别和应用场景简述
Apr 15 Javascript
javascript中的注释使用与注意事项小结
Sep 20 Javascript
jquery插件之定时查询待处理任务数量
May 01 Javascript
Jquery响应回车键直接提交表单操作代码
Jul 25 Javascript
IE6 hack for js 集锦
Sep 23 Javascript
js实现超酷的照片墙展示效果图附源码下载
Oct 08 Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 Javascript
Avalonjs 实现简单购物车功能(实例代码)
Feb 07 Javascript
关于使用axios的一些心得技巧分享
Jul 02 Javascript
基于js Canvas实现二次贝塞尔曲线
Dec 25 Javascript
Vue防止白屏添加首屏动画的实例
Oct 31 Javascript
基于vue 动态菜单 刷新空白问题的解决
Aug 06 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
鼠标左键单击冲突的问题解决方法(防止冒泡)
2014/05/14 Javascript
JavaScript不使用prototype和new实现继承机制
2014/12/29 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
js使用setTimeout实现定时炸弹的方法
2015/04/10 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
JavaScript中constructor()方法的使用简介
2015/06/05 Javascript
浅谈javascript的call()、apply()、bind()的用法
2016/02/21 Javascript
谈谈target=_new和_blank的不同之处
2016/10/25 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
SpringBoot+Vue前后端分离,使用SpringSecurity完美处理权限问题的解决方法
2018/01/09 Javascript
vuex actions传递多参数的处理方法
2018/09/18 Javascript
JavaScript实现省份城市的三级联动
2020/02/11 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
基于Cesium绘制抛物弧线
2020/11/18 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
python调用短信猫控件实现发短信功能实例
2014/07/04 Python
Python实现约瑟夫环问题的方法
2016/05/03 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
Python日期的加减等操作的示例
2017/08/15 Python
Python中字符串List按照长度排序
2019/07/01 Python
Python调用scp向服务器上传文件示例
2019/12/22 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
化妆师职业生涯规划书
2014/02/16 职场文书
报考公务员诚信承诺书
2014/08/29 职场文书
2014年班长个人工作总结
2014/11/14 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
幼儿教师个人总结
2015/02/05 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
SQLServer 错误: 15404,无法获取有关 Windows NT 组/用户 WIN-8IVSNAQS8T7\Administrator 的信息
2021/06/30 SQL Server