为什么捕获选项在addEventListener中不起作用

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

我的'capture'选项似乎在addEventListener中不起作用(即,无论我将其设置为true还是false,都给我相同的控制台结果)。我检查了以下内容:(1)在选项对象中添加“ once:true”-可以,但是捕获不会(2)将'capture'替换为'useCapture'-这似乎也不起作用,在两种情况下都没有错误/警告消息(3)我在网上阅读到某些浏览器(例如chrome版本低于55)不支持较新的选项,例如“ once”(一次)-我正在使用chrome v88,并尝试通过Safari打开文件,以防万一它是浏览器相关问题

你知道我在做什么错吗?


  <div class="one">
    <div class="two">
      <div class="three">
      </div>
    </div>
  </div>

<script>

function handleClick(e) {
  console.log(this.classList.value);
}
const divs = document.querySelectorAll('div');
divs.forEach(div => div.addEventListener('click', handleClick, {capture: true}));
</script>```

javascript addeventlistener options event-bubbling event-capturing
2个回答
0
投票

您的代码对我来说很好:

function handleClick(e) {
  console.log(this.classList.value);
}
const divs = document.querySelectorAll('div');
divs.forEach(div => div.addEventListener('click', handleClick, {
  capture: div.classList.contains('capture')
}));
<div class="one capture">
  One
  <div class="two capture">
    Two
    <div class="three capture">
      Three
    </div>
  </div>
</div>

<div class="one bubble">
  One
  <div class="two bubble">
    Two
    <div class="three bubble">
      Three
    </div>
  </div>
</div>

0
投票

为我工作,请尝试在div上设置高度和颜色,以便查看。

function handleClick(e) { console.log(this.classList.value);}

const divs = document.querySelectorAll('div');

divs.forEach(div => div.addEventListener('click', handleClick, {capture: false}));
main div {
    height: 100px;
    background-color: red;
}
<main>
  <div class="one">
    <div class="two">
      <div class="three">
      </div>
    </div>
  </div>
</main>

如果使用capture: true,输出为:

一个

两个

如果为capture: false,则输出为:

两个

一个

© www.soinside.com 2019 - 2024. All rights reserved.