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 获取Listbox选择的值的代码
Apr 15 Javascript
js实现的仿新浪微博完美的时间组件升级版
Dec 20 Javascript
基于Unit PNG Fix.js有时候在ie6下不正常的解决办法
Jun 26 Javascript
JS简单计算器实例
Jan 20 Javascript
javascript 动态创建表格的2种方法总结
Mar 04 Javascript
jQuery自定义动画函数实例详解(附demo源码)
Dec 10 Javascript
详解微信小程序——自定义圆形进度条
Dec 29 Javascript
JS与HTML结合实现流程进度展示条思路详解
Sep 03 Javascript
js导出Excel表格超出26位英文字符的解决方法ES6
Nov 15 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
Nov 11 Javascript
Vue-cli3简单使用(图文步骤)
Apr 30 Javascript
深入了解js原型模式
May 30 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生成Flash动画的实现代码
2010/03/12 PHP
PHP-redis中文文档介绍
2013/02/07 PHP
php实现数组按指定KEY排序的方法
2015/03/30 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
PHP 自动加载类原理与用法实例分析
2020/04/14 PHP
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
javascript检测浏览器的缩放状态实现代码
2014/09/28 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
JS去除空格和换行的正则表达式(推荐)
2016/06/14 Javascript
AngularJS使用ng-options指令实现下拉框
2016/08/23 Javascript
jQuery图片轮播实现并封装(一)
2016/12/03 Javascript
详解js的异步编程技术的方法
2017/02/09 Javascript
React Native之TextInput组件解析示例
2017/08/22 Javascript
JavaScript 异步调用
2017/10/25 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
python3 unicode列表转换为中文的实例
2018/10/26 Python
python try except返回异常的信息字符串代码实例
2019/08/15 Python
Python数学形态学实例分析
2019/09/06 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Python使用windows设置定时执行脚本
2020/11/12 Python
英语感恩演讲稿
2014/01/14 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
五一劳动节慰问信
2015/02/14 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
大学生奶茶店创业计划书
2019/06/25 职场文书
正则表达式拆分url实例代码
2022/02/24 Java/Android
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技