我有一个应用程序,当您单击背景时会发生某些事情,但是,如果您单击背景上的其他内容,我不希望它激活。例如:
function handleClick() {
alert("Hello!");
}
.container {
position: absolute;
height: 100%;
width: 100%;
background: red;
}
.button {
position: absolute;
height: 20%;
width: 20%;
background: green;
}
<div class="container" onClick="handleClick()">
<div class="button"></div>
</div>
在此示例中,如何在用户单击绿色框时阻止显示警报?
将事件传递给函数,并检查其目标是否与元素本身相同。单击内部元素时,目标将是该元素。使用event.stopPropagation()
防止事件冒泡到容器中。
function handleClick(event, element) {
if (event.target != element) {
event.stopPropagation();
return;
}
alert("Hello!");
}
.container {
position: absolute;
height: 100%;
width: 100%;
background: red;
}
.button {
position: absolute;
height: 20%;
width: 20%;
background: green;
}
<div class="container" onClick="handleClick(event, this)">
<div class="button"></div>
</div>
你需要在div onclick="event.stopPropagation()"
里面使用
停止冒泡
bubbling事件直接从目标元素开始。通常它向上直到<html>
,然后到document
对象,有些事件甚至到达window
,呼叫路径上的所有处理程序。
但是任何处理程序都可以决定事件已经完全处理并停止冒泡。
它的方法是event.stopPropagation()
。
DEMO
function handleClick() {
alert("Hello!");
}
.container {
position: absolute;
height: 100%;
width: 100%;
background: red;
}
.button {
position: absolute;
height: 20%;
width: 20%;
background: green;
}
<div class="container" onClick="handleClick()">
<div onclick="event.stopPropagation()" class="button"></div>
</div>
你可以将e.target
和e.currentTarget
进行比较,如下所示:
function handleClick(e) {
if (e.target == e.currentTarget) {
alert("Hello!");
}
}
.container {
position: absolute;
height: 100%;
width: 100%;
background: red;
}
.button {
position: absolute;
height: 20%;
width: 20%;
background: green;
}
<div class="container" onClick="handleClick(event)">
<div class="button"></div>
</div>
当顶部显示“某事”时,我会分离事件处理程序:
element.removeEventListener("mousedown", handleMouseDown, true);
(注意,在创建事件时,最后一个参数必须与“useCapture”值匹配。)
或者在你的情况下:
document.getElementById('yourDiv').onclick = null;
要么
document.getElementById("yourDiv").removeAttribute("onClick");
你已经在(class =“container”)覆盖屏幕的div上添加了handleClick
函数。当你点击任何地方handleClick将运行。所以添加该函数的div具有class =“button”
<div class="container">
<div class="button" onClick="handleClick()">
</div>