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 方法大全方便学习参考
Feb 25 Javascript
手把手教你自己写一个js表单验证框架的方法
Sep 14 Javascript
JavaScript DOM事件(笔记)
Apr 08 Javascript
js闭包所用的场合以及优缺点分析
Jun 22 Javascript
jquery mobile 移动web(5)
Dec 20 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
Jan 18 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
javascript html5实现表单验证
Mar 01 Javascript
Async/Await替代Promise的6个理由
Jun 15 Javascript
javascript跳转与返回和刷新页面的实例代码
Nov 20 Javascript
微信公众号网页分享功能开发的示例代码
May 27 Javascript
Vue全局使用less样式,组件使用全局样式文件中定义的变量操作
Oct 21 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者的疑难问答(2)
2006/10/09 PHP
php之CodeIgniter学习笔记
2013/06/17 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
javascript获得CheckBoxList选中的数量
2009/10/27 Javascript
js 判断上传文件大小及格式代码
2013/11/13 Javascript
jquery控制display属性为none或block
2014/03/31 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
jQuery基于xml格式数据实现模糊查询及分页功能的方法
2016/12/25 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
解决前后端分离 vue+springboot 跨域 session+cookie失效问题
2019/05/13 Javascript
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
python3编码问题汇总
2016/09/06 Python
Python 使用Numpy对矩阵进行转置的方法
2019/01/28 Python
Python实现对特定列表进行从小到大排序操作示例
2019/02/11 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
python 的topk算法实例
2020/04/02 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
浅谈Python描述数据结构之KMP篇
2020/09/06 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
会计毕业生求职简历的自我评价
2013/10/20 职场文书
土木工程个人自荐信范文
2013/11/30 职场文书
中文专业学生自我评价范文
2014/02/06 职场文书
表决心的诗句大全
2014/03/11 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
县级文明单位申报材料
2014/05/23 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
2014年超市员工工作总结
2014/11/18 职场文书
离婚代理词范文
2015/05/23 职场文书
圆明园纪录片观后感
2015/06/03 职场文书