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 相关文章推荐
js中获取事件对象的方法小结
Mar 13 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
Sep 29 Javascript
extjs ColumnChart设置不同的颜色实现代码
May 17 Javascript
jquery设置元素的readonly和disabled的写法
Sep 22 Javascript
利用window.name实现windowStorage代码分享
Jan 02 Javascript
JavaScript四种调用模式和this示例介绍
Jan 02 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
基于javascript制作经典传统的拼图游戏
Mar 22 Javascript
js 创建对象 经典模式全面了解
Aug 16 Javascript
JS笛卡尔积算法与多重数组笛卡尔积实现方法示例
Dec 01 Javascript
vue页面切换到滚动页面显示顶部的实例
Mar 13 Javascript
vue之a-table中实现清空选中的数据
Nov 07 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+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
javascript 学习之旅 (3)
2009/02/05 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
niceTitle 基于jquery的超链接提示插件
2010/05/31 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
jquery中append()与appendto()用法分析
2014/11/14 Javascript
JavaScript跨平台的开源框架NativeScript
2015/03/24 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
jQuery实现的记住帐号密码功能完整示例
2019/08/03 jQuery
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
python中字符串前面加r的作用
2015/06/04 Python
Python可变参数函数用法实例
2015/07/07 Python
opencv python 基于KNN的手写体识别的实例
2018/08/03 Python
分享Python切分字符串的一个不错方法
2018/12/14 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
Tensorflow使用Anaconda、pycharm安装记录
2020/07/29 Python
python map比for循环快在哪
2020/09/21 Python
浅谈HTML5 FileReader分布读取文件以及其方法简介
2017/11/09 HTML / CSS
Linux如何为某个操作添加别名
2013/03/01 面试题
介绍一下linux的文件权限
2012/02/15 面试题
会计专业大学生职业生涯规划范文
2014/01/11 职场文书
2014物价局群众路线对照检查材料思想汇报
2014/09/21 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
2015年度物流工作总结
2015/04/30 职场文书
村官2015年度工作总结
2015/10/14 职场文书
Pytest allure 命令行参数的使用
2021/04/18 Python
HTML基本元素标签介绍
2022/02/28 HTML / CSS