点击正文但不是两个div

时间:2018-07-03 12:52:14

标签: javascript jquery

这是我的职能:

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

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

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

.more

2 个答案:

答案 0 :(得分:1)

使用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>

答案 1 :(得分:0)

尝试排除您不想受到点击影响的项目:

const getRandomImagePair = () => {
	alert("clicked")
}

$('body :not(".more, .wd")').on('click', getRandomImagePair);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Yep</button>
<button class="more">Nope</button>
<button class="wd">Nope</button>
<button>Yep</button>