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 相关文章推荐
prettify 代码高亮着色器google出品
Dec 28 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
原生js做的手风琴效果的导航菜单
Nov 08 Javascript
JavaScript返回0-1之间随机数的方法
Apr 06 Javascript
javascript绘制漂亮的心型线效果完整实例
Feb 02 Javascript
JS实现的相册图片左右滚动完整实例
Nov 23 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
May 10 Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 Javascript
JS实现前端页面的搜索功能
Jun 12 Javascript
关于在LayUI中使用AJAX提交巨坑记录
Oct 25 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
Sep 16 Javascript
Antd表格滚动 宽度自适应 不换行的实例
Oct 27 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将向Java靠拢
2006/10/09 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
详细解读PHP中接口的应用
2015/08/12 PHP
CI框架入门之MVC简单示例
2016/11/21 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
php fread函数使用方法总结
2019/05/28 PHP
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
微信小程序 保留小数(toFixed)详细介绍
2016/11/16 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
基于JS实现仿百度百家主页的轮播图效果
2017/03/06 Javascript
js基于FileSaver.js 浏览器导出Excel文件的示例
2017/08/15 Javascript
Nodejs把接收图片base64格式保存为文件存储到服务器上
2018/09/26 NodeJs
关于微信小程序获取小程序码并接受buffer流保存为图片的方法
2019/06/07 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
tensorflow实现加载mnist数据集
2018/09/08 Python
python 使用装饰器并记录log的示例代码
2019/07/12 Python
pygame实现非图片按钮效果
2019/10/29 Python
Python文本文件的合并操作方法代码实例
2020/03/31 Python
在python image 中实现安装中文字体
2020/05/16 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
HTML5 新标签全部总汇(推荐)
2016/06/13 HTML / CSS
Joie官方网上商店:购买服装和女装配饰
2018/06/05 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
大学生村官心得体会范文
2014/01/04 职场文书
研究生导师推荐信
2014/09/06 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
特种设备安全管理制度
2015/08/06 职场文书
学校扫黄打非工作总结
2015/10/15 职场文书
学生会部长竞选稿
2015/11/19 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书