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


Posted in Javascript onFebruary 27, 2015

冒泡事件就是点击子节点,事件会向上传递,最后触发父节点,祖先节点的点击事件。

html代码部分:

<body>

    <div id="content">

        外层div元素

        <span>内层span元素</span>

        外层div元素

    </div>

    <div id="msg"></div>

</body>

jQuery代码如下:

<script type="text/javascript">

$(function(){

    $('span').bind("click",function(){

        var txt = $('#msg').html() + "<p>内层span元素被点<p/>";

        $('#msg').html(txt);

    });

    $('#content').bind("click",function(){

        var txt = $('#msg').html() + "<p>外层div元素被点击<p/>";

        $('#msg').html(txt);

    });

    $("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').bind("click",function(event){

        var txt = $('#msg').html() + "<p>内层span元素被点击<p/>";

        $('#msg').html(txt);

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

    });

    $('#content').bind("click",function(event){

        var txt = $('#msg').html() + "<p>外层div元素被点击<p/>";

        $('#msg').html(txt);

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

    });

    $("body").bind("click",function(){

        var txt = $('#msg').html() + "<p>body元素被点击<p/>";

        $('#msg').html(txt);

    });

})

</script>

        有时候点击提交按钮会有一些默认事件。比如跳转到别的界面。但是如果没有通过验证,就不应该跳转。这时候可以通过设置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').bind("click",function(event){

        var txt = $('#msg').html() + "<p>内层span元素被点<p/>";

        $('#msg').html(txt);

        return false;

    });

    $('#content').bind("click",function(event){

        var txt = $('#msg').html() + "<p>外层div元素被点<p/>";

        $('#msg').html(txt);

        return false;

    });

    $("body").bind("click",function(){

        var txt = $('#msg').html() + "<p>body元素被点<p/>";

        $('#msg').html(txt);

    });

})

</script>

jQuery对DOM的事件触发具有冒泡特性。有时利用这一特性可以减少重复代码,但有时候我们又不希望事件冒泡。这个时候就要阻止 jQuery.Event冒泡。

Javascript 相关文章推荐
js cookies 常见网页木马挂马代码 24小时只加载一次
Apr 13 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
Aug 28 Javascript
5分钟理解JavaScript中this用法分享
Nov 09 Javascript
js Object2String方便查看js对象内容
Nov 24 Javascript
node.js中的path.extname方法使用说明
Dec 09 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
Apr 10 Javascript
浅谈node中的exports与module.exports的关系
Aug 01 Javascript
angular6.0开发教程之如何安装angular6.0框架
Jun 29 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
Aug 25 Javascript
Vue Prop属性功能与用法实例详解
Feb 23 Javascript
Node.js学习教程之Module模块
Sep 03 Javascript
JS高级程序设计之class继承重点详解
Jul 07 Javascript
js实现网页右上角滑出会自动消失大幅广告的方法
Feb 27 #Javascript
JavaScript获取元素尺寸和大小操作总结
Feb 27 #Javascript
JS+CSS实现带关闭按钮DIV弹出窗口的方法
Feb 27 #Javascript
Javascript writable特性介绍
Feb 27 #Javascript
jQuery实现DIV层收缩展开的方法
Feb 27 #Javascript
JavaScript函数详解
Feb 27 #Javascript
浅谈JavaScript的事件
Feb 27 #Javascript
You might like
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
一个PHP验证码类代码分享(已封装成类)
2011/07/17 PHP
php打造属于自己的MVC框架
2012/03/07 PHP
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
2015/08/17 Javascript
使用堆实现Top K算法(JS实现)
2015/12/25 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
浅谈Vue.js中的v-on(事件处理)
2017/09/05 Javascript
Vue动态控制input的disabled属性的方法
2018/06/26 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
tensorflow构建BP神经网络的方法
2018/03/12 Python
python Spyder界面无法打开的解决方法
2018/04/27 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
Django中使用session保持用户登陆连接的例子
2019/08/06 Python
python图的深度优先和广度优先算法实例分析
2019/10/26 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
关于python中导入文件到list的问题
2020/10/31 Python
多视角3D逼真HTML5水波动画
2016/03/03 HTML / CSS
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
应届生服务员求职信
2013/10/31 职场文书
电子商务专员岗位职责
2013/12/11 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
企业管理标语
2014/06/10 职场文书
房屋租赁授权委托书范本
2014/09/20 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
干货!开幕词的写作方法
2019/04/02 职场文书
mysql分表之后如何平滑上线详解
2021/11/01 MySQL