【发布时间】:2018-09-09 09:59:37
【问题描述】:
我在锚元素中有一个 span 元素。在 span 元素上是一个点击事件。当我单击跨度并触发事件时,它也会触发锚父元素。
我已经用event.stopPropagation();试过了,但没有效果。
这是一个代码示例
标记:
<a href="#">
<span class="child"></span>
</a>
Javascript:
var children = document.getElementsByClassName("child");
for (var i = 0; i < children.length; i++) {
children[i].addEventListener("click", function(event) {
event.stopPropagation();
console.log("test");
}, false);
}
结果: 点击span事件触发点击事件函数和父锚元素。
这是实际的代码。
点击红色子元素会触发锚父和实际的点击事件。
var deleteButtons = document.getElementsByClassName("delete");
for (var i = 0; i < deleteButtons.length; i++) {
deleteButtons[i].addEventListener("click", function (event) {
event.stopPropagation();
console.log("test");
}, false);
}
.container {
display: flex;
}
a {
display: flex;
position: relative;
align-items: center;
box-sizing: border-box;
height: 48px;
padding: 32px;
margin: 0 16px 16px 0;
border-radius: 8px;
background-color: #CCD0D9;
text-decoration: none;
z-index: 99;
transition: all .2s
}
.text {
color: #000;
}
.delete {
position: absolute;
z-index: 9999;
top: 0;
right: 0;
height: 20px;
width: 20px;
background-color: tomato;
}
<div class="container">
<a href="https://www.google.com/">
<span class="text">title</span>
<span class="delete"></span>
</a>
<a href="https://www.google.com/">
<span class="text">title</span>
<span class="delete"></span>
</a>
<a href="https://www.google.com/">
<span class="text">title</span>
<span class="delete"></span>
</a>
<a href="https://www.google.com/">
<span class="text">title</span>
<span class="delete"></span>
</a>
</div>
【问题讨论】:
-
你确定吗?你的代码看起来不错。是什么让您认为
a的点击事件也在触发? -
请分享原始代码,因为我使用您提供的代码重新创建了效果并且它工作正常(在控制台中打印的消息只有在我单击跨度时才会打印)而不是锚
-
感谢您的 cmets。我已经在问题中添加了一个带有实际代码的代码。
标签: javascript events dom-events anchor