Js冒泡事件详解及阻止示例_javascript技巧
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>
当你点击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绑定事件的话。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

有时,出于多种原因,我们希望在MicrosoftEdge上阻止某些网站,无论是出于家长控制,时间管理,内容过滤,甚至是安全问题。一个常见的动机是提高生产力并保持专注。通过阻止分散注意力的网站,人们可以创造一个有利于工作或学习的环境,最大限度地减少潜在的干扰。最后,内容过滤对于维护安全和尊重的在线环境非常重要。阻止包含露骨、冒犯性或令人反感内容的网站在教育或专业环境中尤其重要,在这些环境中,维护适当的标准和价值观至关重要。如果您可以与这种情况相关,那么本文适合您。下面介绍了如何在Edge中阻止对网

如何在闭包中阻止内存泄漏的发生?闭包是JavaScript中非常强大的特性之一,它能够实现函数的嵌套和数据的封装。然而,闭包也容易导致内存泄漏的问题,特别是在处理异步和定时器的情况下。本文将介绍如何在闭包中阻止内存泄漏,并提供具体的代码示例。内存泄漏通常发生在不再需要某个对象时,却因为某些原因无法释放其所占用的内存。在闭包中,当函数引用外部的变量,而这些变量

常用的阻止冒泡事件指令有哪些?在Web开发中,我们经常会遇到需要处理事件冒泡的情况。当一个元素上触发了某个事件,比如点击事件,它的父级元素也会触发相同的事件。这种事件传递的行为称为事件冒泡。有时候,我们希望阻止事件冒泡,使事件只在当前元素上触发,并阻止其向上级元素传递。为了实现这个目的,我们可以使用一些常见的阻止冒泡事件的指令。event.stopPropa

如何阻止来自iPhone上某人的短信?如果您收到来自要阻止的人的短信,则需要在iPhone上打开该消息。打开消息后,单击顶部的图标,其下方是手机号码或发件人姓名。现在点击信息在屏幕的右侧;现在,您将看到另一个屏幕,其中包含阻止此呼叫者的选项。单击此按钮,然后选择阻止联系人。该电话号码将无法再向您发送短信;它也将被阻止拨打您的iPhone。如何在iPhone上取消阻止被阻止的联系人?如果您决定允许被屏蔽的人向您发送信息,您可以随时在iPhone上取消阻止他们。要在iPhone上取消阻止联系人,您需

不能冒泡的事件有:1、focus事件;2、blur事件;3、scroll事件;4、mouseenter和mouseleave事;5、mouseover和mouseout事件;6、mousemove事件;7、keypress事件;8、beforeunload事件;9、DOMContentLoaded事件;10、cut、copy和paste事件等。

冒泡事件(BubblingEvent)是指在DOM树中从子元素向父元素逐级触发的一种事件传递方式。大多数情况下,冒泡事件具有很好的灵活性和可扩展性,但是也存在一些特殊情况,这些情况下事件不支持冒泡。一、哪些事件不支持冒泡?虽然大部分的事件都支持冒泡,但存在一些事件是不支持冒泡的。以下是一些常见的不支持冒泡的事件:focus和blur事件load和unloa

冒泡事件是指在Web开发中,当一个元素上触发了某个事件后,该事件将会向上层元素传播,直到达到文档根元素。这种传播方式就像气泡从底部逐渐冒上来一样,因此被称为冒泡事件。在实际开发中,了解和理解冒泡事件的工作原理对于正确处理事件十分重要。下面将通过具体的代码示例来详细介绍冒泡事件的概念和使用方法。首先,我们创建一个简单的HTML页面,其中包含一个父级元素和三个子

阻止冒泡事件的指令有stopPropagation()、cancelBubble属性、event.stopPropagation()、event.cancelBubble属性、event.stopImmediatePropagation()等。详细介绍:1、stopPropagation()是最常用的指令之一,用于停止事件的传播。当事件触发时,调用该方法可以阻止事件继续等等。
