首页 web前端 js教程 Js冒泡事件详解及阻止示例_javascript技巧

Js冒泡事件详解及阻止示例_javascript技巧

May 16, 2016 pm 04:54 PM
冒泡事件 阻止

Js冒泡机制是指如果某元素定义了事件A,如click事件,如果触发了事件之后,没有阻止冒泡事件,那么事件将向父级元素传播,触发父类的click函数。
如下例所示:

复制代码 代码如下:



<script> <BR>function ialertdouble(e) { <BR>alert('innerdouble'); <BR>stopBubble(e); <BR>} <br><br>function ialertthree(e) { <BR>alert('innerthree'); <BR>stopBubbleDouble(e); <BR>} <br><br>function stopBubble(e) { <BR>var evt = e||window.event; <BR>evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡 <BR>} <br><br>function stopBubbleDouble(e) { <BR>var evt = e||window.event; <BR>evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡 <BR>evt.preventDefault();//阻止浏览器默认行为,这样链接就不会跳转 <BR>} <br><br>$(function() { <BR>//方法一 <BR>//$('#jquerytest').click(function(event) { <BR>// alert('innerfour'); <BR>// event.stopPropagation(); <BR>// event.preventDefault(); <BR>//}); <br><br>//方法二 <BR>$('#jquerytest').click(function() { <BR>alert('innerfour'); <BR>return false; <BR>}); <BR>}); <BR></script>
without
middle
inner

innerdouble

innerthree


innerfour






当你点击inner的时候,会依次弹出‘inner',‘middle'和‘without'。这就是事件冒泡。

从直观上来看,也是这样的,因为最里层的区域是在父级节点中的,点击了子级节点的区域,其实也是点击了父级节点的区域,所以事件会传播起来。

其实,很多的时候,我们并不想事件冒泡,因为这样会同时触发几个事件。

接下来:我们点击innerdouble。就会发现她并没有冒泡,因为她在调用的方法ialertdouble()中调用了stopBubble()方法,方法通过判断浏览器类型(Ie通过cancleBubble() 、firefox通过stopProgation())来阻止冒泡。

但如果是链接的话,我们会发现她也会阻止冒泡,但是会跳转,这就是浏览器的默认行为。需要借助preventDefault()方法来阻止。具体可以查看ialertthree()。

目前主流的都是借助jquery来绑定click事件的,这样的话,就简单多了。

我们可以在点击事件时传入参数event,然后直接

event.stopPropagation();
event.preventDefault(); //没有链接不需要加这个。

这样就可以了。

框架就是好,其实还有更简单的,在事件处理程序中返回false,这是对在事件对象上同时调用stopPropagation()和preventDefault()的一种简写方式。
【详细代码见上面,记得载入jquery.js。】

其实也还可以在每个click事件中加入判断:
复制代码 代码如下:

$('#id').click(function(event){
if(event.target==this){
//do something
}
})

解析:事件处理程序中的变量event保存着事件对象。而event.target属性保存着发生事件的目标元素。这个属性是DOM API中规定的,但是没有被所有浏览器实现 。jQuery对这个事件对象进行了必要的扩展,从而在任何浏览器中都能够使用这个属性。通过.target,可以确定DOM中首先接收到事件的元素(即实际被单击的元素)。而且,我们知道this引用的是处理事件的DOM元素,所以可以编写以上代码。

不过推荐使用return false,Jquery绑定事件的话。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

如何在 Edge 中阻止对网站的访问 如何在 Edge 中阻止对网站的访问 Jul 12, 2023 am 08:17 AM

如何在 Edge 中阻止对网站的访问

如何在iPhone上阻止短信 如何在iPhone上阻止短信 Jul 31, 2023 pm 09:49 PM

如何在iPhone上阻止短信

闭包中如何有效避免内存泄漏? 闭包中如何有效避免内存泄漏? Jan 13, 2024 pm 12:46 PM

闭包中如何有效避免内存泄漏?

什么事件不能冒泡 什么事件不能冒泡 Nov 20, 2023 pm 03:00 PM

什么事件不能冒泡

不支持冒泡的事件:局限性及范围 不支持冒泡的事件:局限性及范围 Jan 13, 2024 pm 12:51 PM

不支持冒泡的事件:局限性及范围

为何会有事件无法冒泡的情况出现? 为何会有事件无法冒泡的情况出现? Jan 13, 2024 am 08:50 AM

为何会有事件无法冒泡的情况出现?

解决Windows 10下载软件被阻止的方法 解决Windows 10下载软件被阻止的方法 Dec 21, 2023 pm 11:58 PM

解决Windows 10下载软件被阻止的方法

掌握JavaScript中常见的事件冒泡机制 掌握JavaScript中常见的事件冒泡机制 Feb 19, 2024 pm 04:43 PM

掌握JavaScript中常见的事件冒泡机制

See all articles