我想要一个叠加来触发click
事件。但click
适用于每个子节点。
function something(e) {
e.stopPropagation();
console.log('its fired');
}
#overlay {
width: 100%;
}
#image-wrapper {
width: 50%;
}
<div id="overlay" onclick="something">
<div id="image-wrapper">
<img src="image.jpg" id="popupImage" alt="[image]">
</div>
</div>
我不希望它在图像上触发click
。仅在叠加层中。
答案 0 :(得分:2)
event.target
是触发事件的元素。
event.currentTarget
是当前正在处理EventTarget
的EventListeners
。
因此,比较那些可以过滤元素本身触发的事件,而不是它的后代。
document.getElementById('overlay').addEventListener('click', function(e) {
if(e.target != e.currentTarget) return;
console.log('its fired');
});
&#13;
#overlay {
width: 100%;
background: #aaf;
}
#image-wrapper {
width: 50%;
background: #afa;
}
&#13;
<div id="overlay">
<div id="image-wrapper">
<img src="image.jpg" id="popupImage" alt="[image]">
</div>
</div>
&#13;
附加说明:
避免使用html中的内联事件侦听器。最好使用JS添加它们,例如与addEventListener
。
通常,您可以使用this
代替e.currentTarget
。
答案 1 :(得分:1)
你可以试试这个: -
<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();
}
答案 2 :(得分:0)
您需要图像上的事件处理程序(或图像包装器,具体取决于您要查找的确切效果),以便在没有传播到叠加层时单击图像。
或者,检查事件对象的target
属性和return
是否是您不想处理该事件的内容。
答案 3 :(得分:0)
您可以在preventDefault()
img
$("img").click(function(e){
e.preventDefault();
e.stopPropagation();
console.log("stop click");
});
答案 4 :(得分:0)
只需确保点击来自叠加层而不是其他内容:
function something(e) {
e = e || window.event;
evar target = e.target || e.srcElement;
if (target.id === 'overlay') {
console.log('Overlay has been clicked');
} else {
console.log('Something else has been clicked');
}
}
答案 5 :(得分:0)
<div id="overlay" style="width: 100%;" onclick="something">
<div id="image-wrapper" style="width: 50%;">
<img src="image.jpg" id="popupImage">
</div>
</div>
getElementById('overlay').onclick = function(e) {
console.log('did something');
callToSomehtingElse();
}
getElementById('image-wrapper').onclick = function(e){
console.log('but here i prevented it');
e.preventDefault();
e.stopPropagation();
}
感谢所有人......