如何避免来自对象下方 div 的事件?

How to avoid event from div below object?

我有这个代码:

<div style="width:200px;height:100px;border:solid 1px" onclick="alert(1)">
  Title
  <br />
  Subtitle
  <div style="float:right">
  <input type="checkbox" />
  </div>
</div>

我想在用户点击 div 时将用户重定向到 url(现在是警报所在的位置),但我想在用户点击复选框时允许其使用功能.

是否可以在不调用下面 div 中的 alert(1) 的情况下允许单击复选框并更改状态?

你需要使用event.stopPropagation();功能。此功能可防止当前事件在捕获和冒泡阶段进一步传播。

<div style="width:200px;height:100px;border:solid 1px" onclick="alert(1)">
Title
<br />
Subtitle
<div style="float:right">
<input type="checkbox" onclick="onCheckBoxCicked(event)"/>
</div>

 function onCheckBoxCicked(event) {
        alert(2)
        event.stopPropagation();
    };

您需要在 checkbox 单击事件处理程序上使用 stopPropagation() method,因此单击复选框不会触发其单击parents 分区:

HTML:

<input type="checkbox" onclick="avoidAlert(event)" />

JS:

function avoidAlert(event) {
  event.stopPropagation();
}

function avoidAlert(event) {
  event.stopPropagation();
}
<div style="width:200px;height:100px;border:solid 1px" onclick="alert(1)">
  Title
  <br /> Subtitle
  <div style="float:right">
    <input type="checkbox" onclick="avoidAlert(event)" />
  </div>
</div>

MDN Ref for stopPropagation() method:

The stopPropagation() method of the Event interface prevents further propagation of the current event in the capturing and bubbling phases.

您可以在复选框的额外事件处理程序中尝试 event.stopPropagation(),或者如果点击的目标是复选框,则只需检查 div 的事件处理程序:

var theDiv = document.querySelector('.outer'),
    theCheckbox = document.querySelector('input');

theDiv.addEventListener('click', divClicked);
    
function divClicked(e) {
  if (e.target !== theCheckbox) {
    alert('You clicked the div!');
  }
}
<div class="outer" style="width:200px;height:100px;border:solid 1px">
  Title
  <br />
  Subtitle
  <div style="float:right">
  <input type="checkbox" />
  </div>
</div>