防止锚点父元素发生点击事件

时间:2018-09-09 09:59:38

标签: javascript events javascript-events anchor

我在锚元素内部有一个span元素。在span元素上是一个click事件。当我单击范围并触发事件时,它也会触发锚点父元素。

我已经用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事件将触发click事件功能和父锚元素。


这是实际的代码。

点击红色的子元素会触发锚定父元素和实际的点击事件。

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>

1 个答案:

答案 0 :(得分:0)

event.preventDefault()是您要寻找的。您的标记仍然没有意义。如果您不想单击定位标记,请将其设为div或其他名称。或将点击功能添加到锚标记本身。