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 相关文章推荐
Ctrl+Enter提交内容信息
Jun 26 Javascript
PJBlog插件 防刷新的在线播放器
Oct 25 Javascript
js获取图片长和宽度的代码
Nov 24 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
May 17 Javascript
基于Jquery的仿照flash放大图片效果代码
Mar 16 Javascript
jQuery的图片滑块焦点图插件整理推荐
Dec 07 Javascript
深入理解JavaScript系列(49):Function模式(上篇)
Mar 04 Javascript
JavaScript实现复制或剪切内容到剪贴板功能的方法
May 23 Javascript
Three.js基础部分学习
Jan 08 Javascript
JS日程管理插件FullCalendar简单实例
Feb 07 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
基于elementUI使用v-model实现经纬度输入的vue组件
May 12 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之对抗Web扫描器的脚本技巧
2008/10/01 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十三)
2014/06/26 PHP
关于URL最大长度限制的相关资料查证
2014/12/23 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
如何正确配置Nginx + PHP
2016/07/15 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
NodeJs中的VM模块详解
2015/05/06 NodeJs
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
node.js中fs文件系统目录操作与文件信息操作
2018/02/24 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
webpack 如何同时输出压缩和未压缩的文件的实现步骤
2020/06/05 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
[53:52]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python 中的with关键字使用详解
2016/09/11 Python
Python元组操作实例分析【创建、赋值、更新、删除等】
2017/07/24 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
python交互式图形编程实例(三)
2017/11/17 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
EJB面试题
2015/07/28 面试题
跑吧孩子观后感
2015/06/10 职场文书
清明节主题班会
2015/08/14 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
Mysql 一主多从的部署
2022/05/20 MySQL