首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript中的stopPropagation

Javascript中的stopPropagation
EN

Stack Overflow用户
提问于 2014-10-27 15:04:33
回答 6查看 111关注 0票数 0

我想要一个覆盖来触发click事件。但是,click对每个子节点都有影响。

代码语言:javascript
复制
function something(e) {
  e.stopPropagation();
  console.log('its fired');
}
代码语言:javascript
复制
#overlay {
  width: 100%;
}
#image-wrapper {
  width: 50%;
}
代码语言:javascript
复制
<div id="overlay" onclick="something">
  <div id="image-wrapper">
    <img src="image.jpg" id="popupImage" alt="[image]">
  </div>
</div>

我不希望它在图像上触发click。只在覆盖层里。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2014-10-27 15:09:13

您可以在preventDefault()上使用img

代码语言:javascript
复制
$("img").click(function(e){
 e.preventDefault();
 e.stopPropagation();
 console.log("stop click");    

});

小提琴

票数 0
EN

Stack Overflow用户

发布于 2014-10-27 15:11:21

event.target是触发事件的元素。

event.currentTarget是当前正在处理EventListenersEventTarget

因此,比较那些可以过滤在元素本身中触发的事件,而不是在其后代中触发的事件。

代码语言:javascript
复制
document.getElementById('overlay').addEventListener('click', function(e) {
  if(e.target != e.currentTarget) return;
  console.log('its fired');
});
代码语言:javascript
复制
#overlay {
  width: 100%;
  background: #aaf;
}
#image-wrapper {
  width: 50%;
  background: #afa;
}
代码语言:javascript
复制
<div id="overlay">
  <div id="image-wrapper">
    <img src="image.jpg" id="popupImage" alt="[image]">
  </div>
</div>

补充说明:

  • 避免html中的内联事件侦听器。最好使用JS添加它们,例如使用addEventListener
  • 通常,您可以使用this而不是e.currentTarget
票数 2
EN

Stack Overflow用户

发布于 2014-10-27 15:08:07

你可以试试这个:-

代码语言:javascript
复制
 <div id="overlay" style="width: 100%;" onclick="something">
   <div id="image-wrapper" style="width: 50%;">
    <img src="image.jpg" id="popupImage" onclick="nothing">
  </div>
 </div>

function something (e) {


  console.log('its fired');
 }

function nothing (e) {
  e.stopPropagation();

 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26590541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档