jQuery中阻止冒泡事件的方法介绍


Posted in Javascript onApril 12, 2014

一、冒泡事件简介

当我们点击一个控件的时候,如果包括这个控件的父控件也有click事件,则会继续执行。
比如:div下的a都有click事件,点击a的时候,会alert出现2次。这个现象叫做冒泡事件。

这个事件从原始元素开始一直冒泡到DOM树的最上层。
目标元素: 任何一个事件的目标元素都是最开始的那个元素,在我们的这个例子中也就是按钮,
并且它在我们的元素对象中以属性的形式出现。使用事件代理的话我们可以把事 件处理器添加到一个元素上,
等待一个事件从它的子级元素里冒泡上来,并且可以很方便地得知这个事件是从哪个元素开始。
注意:
blur、focus、load和unload不能像其它事件一样冒泡。事实上blur和focus可以用事件捕获而非事件冒泡的方法获得(在IE之外的其它浏览器中)。

二、阻止jQuery事件冒泡

jQuery对DOM的事件触发具有冒泡特性。有时利用这一特性可以减少重复代码,但有时候我们又不希望事件冒泡。这个时候就要阻止 jQuery.Event冒泡。

在jQuery.Event的文档中的开头得知,jQuery.Event对象是符合W3C标准的一个事件对象,同时jQuery.Event免去了检查兼容IE的步骤。
jQuery.Event提供了一个非常简单的方法来阻止事件冒泡:event.stopPropagation();

$("p").click(function(event){
     event.stopPropagation();
     // do something
})

但是这个方法对使用live绑定的事件没有作用,需要一个更简单的方法阻止事件冒泡:return false;

$(this).after("Another paragraph!");
return false;  });

兼容多个浏览器的终止冒泡函数:

   function stopDefault(e) {
        //阻止默认浏览器动作(W3C)
        if (e && e.preventDefault)
            e.preventDefault();
        //IE中阻止函数器默认动作的方式
        else
            window.event.returnValue = false;
        return false;
    }

三、使用event.tatget属性 明确事件对象

事件处理程序中的变量event保存着事件对象。而event.tatget属性保存着发生事件的目标元素。这个属性是DOM API中规定的,但是没有被所有浏览器实现。jQuery对这个事件对象进行了必要的扩展,从而在任何浏览器中都能够使用这个属性。通过.target,可以确定DOM中首先接收到事件的元素。而且,我们知道this引用的是处理事件的DOM元素。

使用event.tatget属性 明确事件对象

阻止事件冒泡的代码如下:

$(document).ready(function() {
    $('switcher').click(function(event){
        if(event.target == this)
        {
            $('switcher .button').toggleClass('hidden');
        }
    };)
});

Javascript 相关文章推荐
jquery简单实现滚动条下拉DIV固定在头部不动
Nov 25 Javascript
javascript中clone对象详解
Dec 03 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
Jan 29 Javascript
JS实现跟随鼠标立体翻转图片的方法
May 04 Javascript
JS中处理时间之setUTCMinutes()方法的使用
Jun 12 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
Feb 02 Javascript
鼠标经过出现气泡框的简单实例
Mar 17 Javascript
详解Angular 4.x NgIf 的用法
May 22 Javascript
用react-redux实现react组件之间数据共享的方法
Jun 08 Javascript
electron中使用bootstrap的示例代码
Nov 06 Javascript
javascript面向对象三大特征之封装实例详解
Jul 24 Javascript
Postman内建变量常用方法实例解析
Jul 28 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 #Javascript
javascript事件冒泡详解和捕获、阻止方法
Apr 12 #Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
Apr 12 #Javascript
用jquery写的菜单从左往右滑动出现
Apr 11 #Javascript
瀑布流布局代码一例
Apr 11 #Javascript
javascript读写json示例
Apr 11 #Javascript
javascript如何判断输入的url是否正确
Apr 11 #Javascript
You might like
部署PHP项目应该注意的几点事项分享
2013/12/20 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
利用switch语句进行多选一判断的实例代码
2016/11/14 PHP
基于php实现的验证码小程序
2016/12/13 PHP
javascript eval函数深入认识
2009/02/21 Javascript
javascript动态加载三
2012/08/22 Javascript
jQuery仿Excel表格编辑功能的实现代码
2013/05/01 Javascript
js判断选择的时间是否大于今天的代码
2013/08/20 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
js时间控件只显示年月
2017/01/08 Javascript
利用Jasmine对Angular进行单元测试的方法详解
2017/06/12 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
jqgrid实现简单的单行编辑功能
2017/09/30 Javascript
如何在JavaScript中优雅的提取循环内数据详解
2019/03/04 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
[02:18]DOTA2英雄基础教程 育母蜘蛛
2014/01/20 DOTA
浅谈MySQL中的触发器
2015/05/05 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
Python获取文件所在目录和文件名的方法
2017/01/12 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
python 通过logging写入日志到文件和控制台的实例
2018/04/28 Python
python pymysql链接数据库查询结果转为Dataframe实例
2020/06/05 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
css3中检验表单的required,focus,valid和invalid样式
2014/02/21 HTML / CSS
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
小学家长会邀请函
2014/01/23 职场文书
班级入场式解说词
2014/02/01 职场文书
企业员工薪酬方案
2014/06/04 职场文书
学校党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
西双版纳导游词
2015/02/03 职场文书
解决python存数据库速度太慢的问题
2021/04/23 Python