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 相关文章推荐
javascript 从if else 到 switch case 再到抽象
Jul 17 Javascript
JS获取iframe中longdesc属性的方法
Apr 01 Javascript
JS重载实现方法分析
Dec 16 Javascript
微信小程序 图片绝对定位(背景图片)
Apr 05 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
Jul 11 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
Aug 22 Javascript
vue-router权限控制(简单方式)
Oct 29 Javascript
微信小程序监听用户登录事件的实现方法
Nov 11 Javascript
jQuery实现全选、反选和不选功能的方法详解
Dec 04 jQuery
Angular 多模块项目构建过程
Feb 13 Javascript
javascript实现搜索筛选功能实例代码
Nov 12 Javascript
js canvas实现五子棋小游戏
Jan 22 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
关于zend studio 出现乱码问题的总结
2013/06/23 PHP
php防止站外远程提交表单的方法
2014/10/20 PHP
php两种无限分类方法实例
2015/04/21 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
phpwind放自动注册方法
2006/12/02 Javascript
Javascript 按位与赋值运算符 (&=)使用介绍
2014/02/04 Javascript
json中换行符的处理方法示例介绍
2014/06/10 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
JavaScript fontsize方法入门实例(按照指定的尺寸来显示字符串)
2014/10/17 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
2017/01/19 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
vue中$nextTick的用法讲解
2019/01/17 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
vue项目中将element-ui table表格写成组件的实现代码
2019/06/12 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
Python进度条实时显示处理进度的示例代码
2018/01/30 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
Django框架的中的setting.py文件说明详解
2018/10/15 Python
Python虚拟环境的原理及使用详解
2019/07/02 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
pandas DataFrame运算的实现
2020/06/14 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
Hawes & Curtis官网:英国经典品牌
2019/07/27 全球购物
实习自我鉴定范文
2013/10/30 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
出国留学英文自荐信
2015/03/25 职场文书
行政前台岗位职责
2015/04/16 职场文书
python requests模块的使用示例
2021/04/07 Python
python Polars库的使用简介
2021/04/21 Python
SQL实现LeetCode(197.上升温度)
2021/08/07 MySQL
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python