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 相关文章推荐
基于JQuery框架的AJAX实例代码
Nov 03 Javascript
Lab.js初次使用笔记
Feb 28 Javascript
浅谈JSON.parse()和JSON.stringify()
Jul 14 Javascript
详解JavaScript函数
Dec 01 Javascript
js+html5操作sqlite数据库的方法
Feb 02 Javascript
微信小程序开发经验总结(推荐)
Jan 11 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
Feb 13 Javascript
Vue2.0表单校验组件vee-validate的使用详解
May 02 Javascript
node实现简单的增删改查接口实例代码
Aug 22 Javascript
JS数组属性去重并校验重复数据
Jan 10 Javascript
JavaScript实现旋转木马轮播图
Mar 16 Javascript
手写Vue2.0 数据劫持的示例
Mar 04 Vue.js
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实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
超强多功能php绿色集成环境详解
2017/01/25 PHP
php编程实现简单的网页版计算器功能示例
2017/04/26 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
JS对HTML标签select的获取、添加、删除操作
2013/10/17 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
JavaScript让Textarea支持tab按键的方法
2015/06/26 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
Vue组件开发技巧总结
2018/03/04 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
使用vue实现各类弹出框组件
2019/07/03 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
微信小程序picker组件两列关联使用方式
2020/10/27 Javascript
Python使用回溯法子集树模板解决迷宫问题示例
2017/09/01 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
2018/10/28 Python
django解决跨域请求的问题详解
2019/01/20 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
基于Python中的yield表达式介绍
2019/11/19 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
python中添加模块导入路径的方法
2021/02/03 Python
html5 datalist 选中option选项后的触发事件
2020/03/05 HTML / CSS
GUESS西班牙官方网上商城:美国服饰品牌
2017/03/15 全球购物
三分钟演讲稿事例
2014/03/03 职场文书
yy司仪主持词
2014/03/22 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
检讨书范文
2015/01/27 职场文书
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
从结婚开始的恋爱故事。小说《我的美好婚事》TV动画化决定
2022/04/07 日漫
Win10系统搭建ftp文件服务器详细教程
2022/08/05 Servers