如何避免从 div 注册到另一个鼠标点击事件?

How do you avoid two mouseclick events registering from a div on top of another?

JSFiddle link to code

情况:

event.stopPropagation()event.cancelBubbles=true 不起作用,除非我使用不当。

如何避免点击圆时注册方框点击?

html

<div class="container">
  <div class="box">
    <div class="circle"></div>
  </div>
</div>

js

const box = document.querySelector('.box');
const circle = document.querySelector('.circle');

const handleBox = (e) => {
  e.stopPropagation();
  e.cancelBubble = true;
  console.log('box clicked');
};

const handleCircle = (e) => {
  e.stopPropagation();
  e.cancelBubble = true;
  console.log('circle clicked');
}

box.addEventListener('click', handleBox);
circle.addEventListener('mousedown', handleCircle);

您的代码正在监听对框的点击,但对圆圈的鼠标按下。

正因为如此,圆圈得到了点击,未能捕捉到它,并将其传递给盒子。

修复:更改此:

circle.addEventListener('mousedown', handleCircle);

对此:

circle.addEventListener('click', handleCircle);