Javascript 如何防止链接单击时的事件传播?
当我点击我的a标签时,我不想触发父事件。如果孩子有一个正常的事件监听器,event.stopPropagation()可以阻止它,但是当没有“event”时,我该如何做呢Javascript 如何防止链接单击时的事件传播?,javascript,stoppropagation,Javascript,Stoppropagation,当我点击我的a标签时,我不想触发父事件。如果孩子有一个正常的事件监听器,event.stopPropagation()可以阻止它,但是当没有“event”时,我该如何做呢 标题 document.getElementById(“父”).addEventListener(“单击”,函数)(){ 警惕(“哦,不,你点击了我!”); }); 方法1 如果子级有一个正常的事件侦听器,则可以通过event.stopPropagation()阻止它 对 但在没有“事件”的情况下,我该如何做呢 有一件事。你
标题
document.getElementById(“父”).addEventListener(“单击”,函数)(){
警惕(“哦,不,你点击了我!”);
});
方法1
如果子级有一个正常的事件侦听器,则可以通过event.stopPropagation()阻止它
对
但在没有“事件”的情况下,我该如何做呢
有一件事。你只是没在听
您可以通过侦听子元素来解决此问题:
document.getElementById(“父”).addEventListener(“单击”,函数)(){
警惕(“哦,不,你点击了我!”);
});
document.querySelector(“a”).addEventListener(“单击”,函数(e){
e、 停止传播();
});代码>
只需在链接中添加一个单击侦听器,您就可以在该链接上执行事件.stopPropagation()代码>。这将防止单击子对象产生气泡(从而触发单击父对象)
document.getElementById(“父”).addEventListener(“单击”,函数)(){
log('parent received click');
});
document.getElementById(“子”).addEventListener(“单击”),函数(e){
e、 preventDefault();//此行阻止更改链接href的URL
e、 stopPropagation();//此行防止链接单击冒泡
log('child clicked');
});代码>
试试这个
document.getElementById(id-here).addEventListener("click", function(e) {
e.stopImmediatePropagation();
console.log("clicked");
});
调用event.stopImmediatePropagation()根据我的经验,将为您提供预期的结果。事件
对象也可以在onclick
处理程序中使用:
<a id="child" href="https://i.kym-cdn.com/entries/icons/facebook/000/013/564/doge.jpg"
onclick="event.stopPropagation()">Text</a>
灵感来源于
⚠️ 与Internet Explorer不兼容,但与Edge(在v89上测试)配合良好。您似乎从我的答案中复制粘贴了代码…您这样做是因为您的版本中未定义黑名单
,这也无法理解问题。您添加的内容将停止在“parent”的祖先上触发事件,但目标是在单击“parent”内的链接时停止在“parent”上的事件。很抱歉,我刚从up获得代码,我认为这是从问题中获得的。等等,我将编辑+我想突出显示stopImmediatePropagation()函数。。不是我在前面的评论中指出的代码,在“parent”上调用stopImmediatePropagation
不会解决问题。是的,我同意,这里ID应该是子元素的ID。
<a id="child" href="https://i.kym-cdn.com/entries/icons/facebook/000/013/564/doge.jpg"
onclick="event.stopPropagation()">Text</a>