Js冒泡机制是指如果某元素定义了事件A,如click事件,如果触发了事件之后,没有阻止冒泡事件,那么事件将向父级元素传播,触发父类的click函数。
如下例所示:
<html>
<script type="text/javascript" src="jquery-1.7.1.js"></script>
<script>
function ialertdouble(e) {
alert('innerdouble');
stopBubble(e);
}
function ialertthree(e) {
alert('innerthree');
stopBubbleDouble(e);
}
function stopBubble(e) {
var evt = e||window.event;
evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡
}
function stopBubbleDouble(e) {
var evt = e||window.event;
evt.stopPropagation?evt.stopPropagation():(evt.cancelBubble=true);//阻止冒泡
evt.preventDefault();//阻止浏览器默认行为,这样链接就不会跳转
}
$(function() {
//方法一
//$('#jquerytest').click(function(event) {
// alert('innerfour');
// event.stopPropagation();
// event.preventDefault();
//});
//方法二
$('#jquerytest').click(function() {
alert('innerfour');
return false;
});
});
</script>
<div onclick="alert('without');">without
<div onclick="alert('middle');">middle
<div onclick="alert('inner');">inner</div>
<div onclick="ialertdouble(event)">innerdouble</div>
<p><a href='http://www.baidu.com' onclick="ialertthree(event)">innerthree</a></p>
<p id='jquerytest'><a href='http://www.baidu.com'>innerfour</a></p>
</div>
</div>
</html>
当你点击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绑定事件的话。
更多请支持:http://www.webyang.net/Html/web/article_102.html
分享到:
相关推荐
总的来说,JavaScript的事件冒泡机制是DOM事件处理的基础,理解并掌握如何阻止事件冒泡对于编写复杂的交互式Web应用非常关键。通过原生JavaScript或使用像jQuery这样的库,我们可以精确控制事件的传播和处理,从而...
在冒泡阶段,可以在任何父级元素上的事件处理函数中调用event.stopPropagation()方法来阻止事件进一步向上冒泡。 事件捕获则是与冒泡相对的一个过程。在事件捕获模型中,事件从最外层(window对象)开始向下传播,...
### JS与jQuery阻止事件冒泡详解 #### 一、引言 在Web开发中,事件处理是不可或缺的一部分,其中事件冒泡机制尤为重要。事件冒泡是指事件从最深层的节点开始,逐级向上传播至最顶层的节点。在某些情况下,我们希望...
JavaScript事件详解 JavaScript是一种基于浏览器的脚本语言,它的事件机制是实现动态交互的重要部分。在JavaScript中,事件是用户或浏览器对网页进行操作时触发的特定动作,比如点击按钮、鼠标移动等。本文将详细...
3. **阻止事件冒泡**:有时候我们不希望事件继续向上冒泡,可以使用`stopPropagation`方法。在非标准的IE浏览器中,可以使用`event.cancelBubble = true`。`stopPropagation`仅阻止事件的冒泡,但不会阻止默认行为。...
javascript 中事件冒泡和事件捕获机制的详解 二者作用:描述事件触发时序问题 事件捕获:从document到触发事件的那个节点,即自上而下的去触发事件—由外到内 事件冒泡:自下而上的去触发事件—由内到外 绑定事件...
为了阻止事件冒泡,微信小程序提供了`catchtap`事件。将`bindtap`替换为`catchtap`,可以确保事件只在当前组件中处理,不会继续向上冒泡。如下所示: ```html outer middle <view bindtap='handinner'>inner ...
谈起JavaScript的 事件,事件冒泡、事件捕获、阻止默认事件这三个话题,无论是面试还是在平时的工作中,都很难避免。 1.事件冒泡 先来看一段代码: var $input = document.getElementsByTagName(input)[0]; var $...
在这篇文章中,作者深入讲解了在JavaScript编程中如何阻止事件冒泡以及阻止事件的默认行为。接下来,我们将从这两方面详细解释知识点。 首先,让我们来了解什么是事件冒泡。在Web开发中,事件冒泡是指当一个事件在...
这个函数接收一个事件对象作为参数,通过检查`stopPropagation`是否存在来判断浏览器是否支持,然后相应地调用该方法或设置`cancelBubble`属性,从而阻止事件冒泡到更上层的元素。 理解事件冒泡机制对于编写高效的...
<%@ Page Language=C# AutoEventWireup=true CodeFile=Default5.aspx.csInherits=Default5%> <!DOCTYPE ...<... <head runat=server>...Porschev--
问题在于,React的事件处理机制使得简单的`e.stopPropagation()`不能阻止事件冒泡到document级别,而`e.nativeEvent.stopPropagation()`又会导致React的事件处理器无法正常工作。 解决这个问题的正确方法是检查事件...
一、事件的发生顺序 这个问题的起源非常简单,假设你在一个元素中又嵌套了另一个元素 代码如下: ———————————– | element1 | | ————————- | | |element2 | | | ————————- | | ...
在这个"妙味课堂原创JavaScript视频教程——事件详解3课资料"中,我们深入探讨了JavaScript事件的精髓,帮助开发者更好地理解和运用这一核心概念。以下是关于JavaScript事件的详细讲解: 1. **事件基础**:事件是...