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 相关文章推荐
JavaScript 自动分号插入(JavaScript synat:auto semicolon insertion)
Nov 04 Javascript
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
Dec 12 Javascript
js动画(animate)简单引擎代码示例
Dec 04 Javascript
GRID拖拽行的实例代码
Jul 18 Javascript
javascript制作loading动画效果 loading效果
Jan 14 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
基于JS递归函数细化认识及实用实例(推荐)
Aug 07 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
Jun 05 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
基于JavaScript实现留言板功能
Mar 16 Javascript
vue 实现tab切换保持数据状态
Jul 21 Javascript
Element Tooltip 文字提示的使用示例
Jul 26 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 设计模式之 工厂模式
2008/12/19 PHP
解析php中const与define的应用区别
2013/06/18 PHP
PHP使用strstr()函数获取指定字符串后所有字符的方法
2016/01/07 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
IE6、IE7中setAttribute不支持class/for/rowspan/colspan等属性
2011/08/28 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
jQuery Ajax 实例代码 ($.ajax、$.post、$.get)
2016/04/29 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
2016/10/25 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
angular仿支付宝密码框输入效果
2017/03/25 Javascript
详解AngularJS ng-class样式切换
2017/06/27 Javascript
python实现根据窗口标题调用窗口的方法
2015/03/13 Python
在Docker上开始部署Python应用的教程
2015/04/17 Python
python简单实现获取当前时间
2016/08/27 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
Html5页面在微信端的分享的实现方法
2018/08/30 HTML / CSS
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
ALDI奥乐齐官方海外旗舰店:德国百年超市
2017/12/27 全球购物
哈弗商学院毕业生求职信
2014/02/26 职场文书
平面设计师岗位职责
2014/09/18 职场文书
官僚主义现象查摆问题整改措施
2014/10/04 职场文书
Rust 连接 PostgreSQL 数据库的详细过程
2022/01/22 PostgreSQL
5个实用的JavaScript新特性
2022/06/16 Javascript