这是我的功能:

document.querySelector('body').addEventListener('click',e=>{getRandomImagePair()});

当我单击身体上的任何地方时,都会发生某些事情。我有两个div.more,如果单击它们,则会执行功能.wd。我该如何做才能使我单击链接而不会触发该功能?

我在下面尝试了此方法,它可以工作,但是getRandomImagePair() div不会触发另一个需要的其他函数。

$('.more, .wd').on('click', function(event) {
  event.stopPropagation();
});

最佳答案

使用event delegation,只需检查className元素的event.target。在事件处理程序回调中使用if语句,以防止单击getRandomImagePair的链接:



function getRandomImagePair() {
  console.log('getRandomImagePair called');
}

//using event delegation
document.querySelector('body').addEventListener('click', e => {
  if (e.target.className !== 'wd' && e.target.className !== 'more') {
    getRandomImagePair();
  }
});

.wd,
.more {
  color: blue;
  text-decoration: underline;
}

<body>
  <div class="more">.more</div>
  <div class="wd">.wd</div>

  <p>Here is some other stuff</p>
  <p>that when clicked on should still fire event handler</p>
</body>

09-20 06:17