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插件集合推荐
Apr 19 Javascript
instanceof和typeof运算符的区别详解
Jan 06 Javascript
JavaScript中检查对象property的存在性方法介绍
Dec 30 Javascript
jQuery实现类似淘宝网图片放大效果的方法
Jul 08 Javascript
ES6的新特性概览
Mar 10 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
May 20 Javascript
Vue.js实战之组件的进阶
Apr 04 Javascript
js is_valid_filename验证文件名的函数
Jul 19 Javascript
jQuery图片加载失败替换默认图片方法汇总
Nov 29 jQuery
JQuery的加载和选择器用法简单示例
May 13 jQuery
微信小程序云开发获取文件夹下所有文件(推荐)
Nov 14 Javascript
node中使用shell脚本的方法步骤
Mar 23 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
《斗罗大陆》六翼天使武魂最强,为什么老千家不是上三宗?
2020/03/02 国漫
PHP教程 预定义变量
2009/10/23 PHP
Godaddy空间Zend Optimizer升级方法
2010/05/10 PHP
PHP常用操作类之通信数据封装类的实现
2017/07/16 PHP
PHP中的异常处理机制深入讲解
2020/11/10 PHP
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
extjs ColumnChart设置不同的颜色实现代码
2013/05/17 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
javascript 实现字符串反转的三种方法
2013/11/23 Javascript
js sort 二维数组排序的用法小结
2014/01/24 Javascript
JavaScript实现弹出模态窗体并接受传值的方法
2016/02/12 Javascript
详解vuex的简单使用
2018/03/12 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
2018/07/25 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
详解javascript函数写法大全
2019/03/25 Javascript
vue遍历对象中的数组取值示例
2019/11/07 Javascript
JS简单表单验证功能完整示例
2020/01/26 Javascript
Vue中使用Echarts仪表盘展示实时数据的实现
2020/11/01 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Python re模块介绍
2014/11/30 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
对Python3 序列解包详解
2019/02/16 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
2020/10/19 Python
python中xlrd模块的使用详解
2021/02/01 Python
canvas实现图片马赛克的示例代码
2018/03/26 HTML / CSS
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
口腔工艺技术专业毕业生自荐信
2013/09/27 职场文书
2014婚礼司仪主持词
2014/03/14 职场文书
奥巴马当选演讲稿
2014/09/10 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
西安兵马俑导游词
2015/02/02 职场文书
学生会个人总结范文
2015/02/15 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python