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 相关文章推荐
仅IE9/10同时支持script元素的onload和onreadystatechange事件分析
Apr 27 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
Sep 04 Javascript
javascript仿php的print_r函数输出json数据
Sep 13 Javascript
JS高级调试技巧:捕获和分析 JavaScript Error详解
Mar 16 Javascript
浅谈javascript中的Function和Arguments
Aug 30 Javascript
基于Vue中点击组件外关闭组件的实现方法
Mar 06 Javascript
对vuex中getters计算过滤操作详解
Nov 06 Javascript
JavaScript计算正方形面积
Nov 26 Javascript
js事件机制----捕获与冒泡机制实例分析
May 22 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
Jul 20 Javascript
vue中 this.$set的使用详解
Nov 17 Vue.js
分享一个vue实现的记事本功能案例
Apr 11 Vue.js
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
咖啡的种类和口感
2021/03/03 新手入门
?生?D片??C字串
2006/12/06 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
2014/07/11 PHP
js继承的实现代码
2010/08/05 Javascript
BOM与DOM的区别分析
2010/10/26 Javascript
读JavaScript DOM编程艺术笔记
2011/11/15 Javascript
js捕获鼠标右键菜单中的粘帖事件实现代码
2013/04/01 Javascript
JS 修改URL参数(实现代码)
2013/07/08 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
分享两段简单的JS代码防止SQL注入
2016/04/12 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
jQuery EasyUI ProgressBar进度条组件
2017/02/28 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
vue实现选项卡及选项卡切换效果
2018/04/24 Javascript
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
Javascript如何递归遍历本地文件夹
2020/08/06 Javascript
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
使用Python实现画一个中国地图
2019/11/23 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
2020/03/10 Python
Python实现中英文全文搜索的示例
2020/12/04 Python
生物化学研究助理员求职信
2013/10/09 职场文书
长安大学毕业生自我鉴定
2014/01/17 职场文书
《钱学森》听课反思
2014/03/01 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
青春演讲稿范文
2014/05/08 职场文书
文明寝室标语
2014/06/13 职场文书
社区创先争优承诺书
2014/08/30 职场文书
暑期培训心得体会
2014/09/02 职场文书
员工升职自荐信
2015/03/27 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
在职证明格式样本
2015/06/15 职场文书
使用vue判断当前环境是安卓还是IOS
2022/04/12 Vue.js