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 中debug方式
Feb 07 Javascript
指定位置如果有图片显示图片,无图片显示广告的JS
Jun 05 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
Jun 25 Javascript
aspx中利用js实现确认删除代码
Jul 22 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
May 03 Javascript
解决js正则匹配换行问题实现代码
Dec 10 Javascript
js获取客户端外网ip的简单实例
Nov 21 Javascript
jQuery对Select的操作大集合(收藏)
Dec 28 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
Aug 05 Javascript
Node.js 基础教程之全局对象
Aug 06 Javascript
微信小程序支付前端源码
Aug 29 Javascript
vue实现表格过滤功能
Sep 27 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分页函数代码(简单实用型)
2010/12/02 PHP
一组PHP可逆加密解密算法实例代码
2014/01/21 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
Opacity.js
2007/01/22 Javascript
DOM相关内容速查手册
2007/02/07 Javascript
基于jQuery选择器的整理集合
2013/04/26 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
js读取并解析JSON类型数据的方法
2015/11/14 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
有关jQuery中parent()和siblings()的小问题
2016/06/01 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
vue.js绑定class和style样式(6)
2016/12/09 Javascript
使用jQuery实现购物车结算功能
2017/08/15 jQuery
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
javascript+HTML5 canvas绘制时钟功能示例
2019/05/15 Javascript
js的Object.assign用法示例分析
2020/03/05 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
Linux下Python获取IP地址的代码
2014/11/30 Python
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
2017/06/15 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
Pytorch之contiguous的用法
2019/12/31 Python
Python实现井字棋小游戏
2020/03/09 Python
简单的HTML5初步入门教程
2015/09/29 HTML / CSS
美国知名艺术画网站:Art.com
2017/02/09 全球购物
找到您丢失的钥匙、钱包和手机:Tile
2017/05/19 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
厂长助理岗位职责
2013/12/27 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
情人节单身感言
2015/08/03 职场文书
nginx常用命令放入shell脚本详解
2021/03/31 Servers
python如何获取网络数据
2021/04/11 Python