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

Jak*_*123 6 html javascript

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

function handleClick() {
  alert("Hello!");
}
Run Code Online (Sandbox Code Playgroud)
.container {
  position: absolute;
  height: 100%;
  width: 100%;
  background: red;
}

.button {
  position: absolute;
  height: 20%;
  width: 20%;
  background: green;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container" onClick="handleClick()">
  <div class="button"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

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

Nar*_*hav 7

您需要使用内部 divonclick="event.stopPropagation()"

停止冒泡

冒泡事件从目标元素直接向上发生。通常它会向上直到<html>,然后到达document对象,有些事件甚至到达window,调用路径上的所有处理程序。

但是任何处理程序都可以确定该事件已完全处理并停止冒泡。

其方法是event.stopPropagation()

演示版

function handleClick() {
  alert("Hello!");
}
Run Code Online (Sandbox Code Playgroud)
.container {
  position: absolute;
  height: 100%;
  width: 100%;
  background: red;
}

.button {
  position: absolute;
  height: 20%;
  width: 20%;
  background: green;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container" onClick="handleClick()">
  <div onclick="event.stopPropagation()" class="button"></div>
</div>
Run Code Online (Sandbox Code Playgroud)


Bar*_*mar 6

将事件传递给函数,并检查其目标是否与元素本身相同。当您单击内部元素时,目标将是该元素。用于event.stopPropagation()防止事件冒泡到容器中。

function handleClick(event, element) {
  if (event.target != element) {
    event.stopPropagation();
    return;
  }
  alert("Hello!");
}
Run Code Online (Sandbox Code Playgroud)
.container {
  position: absolute;
  height: 100%;
  width: 100%;
  background: red;
}

.button {
  position: absolute;
  height: 20%;
  width: 20%;
  background: green;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container" onClick="handleClick(event, this)">
  <div class="button"></div>
</div>
Run Code Online (Sandbox Code Playgroud)