如何在JavaScript中停止事件捕获?

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

我们可以使用event.stopPropagation()来阻止事件冒泡。我们可以使用相同的方法来停止事件捕获吗?

如果没有,我们怎么能实现呢?

javascript jquery stoppropagation
2个回答
5
投票

如果已将侦听器添加到捕获阶段而不是冒泡阶段,则可以使用相同的方法阻止事件捕获到子元素:event.stopPropagation()

例如,在此代码中,您将看到#inner的侦听器永远不会被触发,因为#outer的侦听器会阻止事件向下传播:

document.querySelector('#outer').addEventListener(
  'click',
  function(event) {
    console.log('propagation stopped');
    event.stopPropagation();
  },
  true // Add listener to *capturing* phase
);

document.querySelector('#inner').addEventListener(
  'click',
  function(e) {
    console.log('inner clicked');
  }
);
<div id="outer">
  outer
  <div id="inner">
    inner
  </div>
</div>

0
投票

你应该将false作为3参数传递给addEventListener。它禁用事件捕获阶段。

document.body.addEventListener('click', onClickFunc, false);
© www.soinside.com 2019 - 2024. All rights reserved.