如果另一个元素位于顶部,则阻止onClick触发

问题描述 投票:1回答:5

我有一个应用程序,当您单击背景时会发生某些事情,但是,如果您单击背景上的其他内容,我不希望它激活。例如:

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>

在此示例中,如何在用户单击绿色框时阻止显示警报?

javascript html
5个回答
2
投票

将事件传递给函数,并检查其目标是否与元素本身相同。单击内部元素时,目标将是该元素。使用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>

3
投票

你需要在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>

1
投票

你可以将e.targete.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>

0
投票

当顶部显示“某事”时,我会分离事件处理程序:

element.removeEventListener("mousedown", handleMouseDown, true);

(注意,在创建事件时,最后一个参数必须与“useCapture”值匹配。)

或者在你的情况下:

document.getElementById('yourDiv').onclick = null;

要么

document.getElementById("yourDiv").removeAttribute("onClick");

0
投票

你已经在(class =“container”)覆盖屏幕的div上添加了handleClick函数。当你点击任何地方handleClick将运行。所以添加该函数的div具有class =“button”

<div class="container">
  <div class="button" onClick="handleClick()">
</div>
© www.soinside.com 2019 - 2024. All rights reserved.