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 相关文章推荐
JS 判断undefined的实现代码
Nov 26 Javascript
JavaScript 学习笔记(十二) dom
Jan 21 Javascript
JavaScript 实现简单的倒计时弹窗DEMO附图
Mar 05 Javascript
JS实现页面载入时随机显示图片效果
Sep 07 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 Javascript
js数组常用最重要的方法
Feb 04 Javascript
React路由管理之React Router总结
May 10 Javascript
详解Node.js中path模块的resolve()和join()方法的区别
Oct 29 Javascript
使用xampp将angular项目运行在web服务器的教程
Sep 16 Javascript
浅谈Vue.set实际上是什么
Oct 17 Javascript
vue-autoui自匹配webapi的UI控件的实现
Mar 20 Javascript
js实现石头剪刀布游戏
Oct 11 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水印类,支持添加图片、文字、填充颜色区域的实现
2017/02/04 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
YII框架关联查询操作示例
2019/04/29 PHP
Nigma vs Alliance BO5 第五场2.14
2021/03/10 DOTA
editable.js 基于jquery的表格的编辑插件
2011/10/24 Javascript
客户端js性能优化小技巧整理
2013/11/05 Javascript
js鼠标悬浮出现遮罩层的方法
2015/01/28 Javascript
详解Javacript和AngularJS中的Promises
2016/02/09 Javascript
JavaScript 数组some()和filter()的用法及区别
2016/05/20 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
JS实现漂亮的时间选择框效果
2016/08/20 Javascript
jQuery实现底部浮动窗口效果
2016/09/07 Javascript
easyui简介_动力节点Java学院整理
2017/07/14 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
Vue实现简单分页器
2018/12/29 Javascript
angular6开发steps步骤条组件
2019/07/04 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
layui文件上传控件带更改后数据传值的方法
2019/09/23 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
仅用50行Python代码实现一个简单的代理服务器
2015/04/08 Python
python用户管理系统的实例讲解
2017/12/23 Python
python将一个英文语句以单词为单位逆序排放的方法
2018/12/20 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
numpy数组做图片拼接的实现(concatenate、vstack、hstack)
2019/11/08 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
python字典的值可以修改吗
2020/06/29 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
美国领先的个性化礼品商城:Personalization Mall
2019/07/27 全球购物
医学专业大学生求职的自我评价
2013/11/27 职场文书
房地产销售员的自我评价分享
2013/12/04 职场文书
销售业务员岗位职责
2014/01/29 职场文书
2014年高校辅导员工作总结
2014/12/09 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js