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中的$.getJSON 使用说明
Mar 10 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
Dec 07 Javascript
javascript 系统文件夹文件操作及参数介绍
Jan 08 Javascript
Node.js实现简单聊天服务器
Jun 20 Javascript
JavaScript基于ajax编辑信息用法实例
Jul 15 Javascript
JS+CSS实现分类动态选择及移动功能效果代码
Oct 19 Javascript
jquery实现垂直和水平菜单导航栏
Aug 27 Javascript
在React 组件中使用Echarts的示例代码
Nov 08 Javascript
JavaScript生成简单等差数列
Nov 28 Javascript
ES6知识点整理之对象解构赋值应用示例
Apr 17 Javascript
Angular之jwt令牌身份验证的实现
Feb 14 Javascript
JavaScript实现手风琴效果
Feb 18 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
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
php的闭包(Closure)匿名函数详解
2015/02/22 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
PHP+mysql实现的三级联动菜单功能示例
2019/02/15 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
JavaScript prototype属性使用说明
2010/05/13 Javascript
js 数值项目的格式化函数代码
2010/05/14 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
JavaScript 代码压缩工具小结
2012/02/27 Javascript
jquery实现加载等待效果示例
2013/09/25 Javascript
5秒后跳转到另一个页面的js代码
2013/10/12 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
node网页分段渲染详解
2016/09/05 Javascript
vuex中使用对象展开运算符的示例
2017/09/25 Javascript
JavaScript中变量、指针和引用功能与操作示例
2018/08/04 Javascript
node.js实现为PDF添加水印的示例代码
2018/12/05 Javascript
js实现随机抽奖
2020/03/19 Javascript
vue实现购物车的监听
2020/04/20 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访-EG篇
2018/04/03 DOTA
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
django小技巧之html模板中调用对象属性或对象的方法
2018/11/30 Python
浅谈Pycharm中的Python Console与Terminal
2019/01/17 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
python 决策树算法的实现
2020/10/09 Python
使用Python封装excel操作指南
2021/01/29 Python
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
跑操口号
2014/06/12 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
幼儿园大班教师随笔
2015/08/14 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python
WIN10使用IIS部署ftp服务器详细教程
2022/08/05 Servers