【问题标题】:Prevent anchor parent element from click event防止锚定父元素点击事件
【发布时间】: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


【解决方案1】:

event.preventDefault() 是您正在寻找的那个。你的标记仍然没有意义。如果您不希望单击锚标记,请将其设为 div 或其他内容。或将点击功能添加到锚标记本身。

【讨论】:

  • 标记背后的想法:我有一个可点击的锚元素,它指向另一个页面。但是在这个元素内部是一个较小的元素(在右上角),具有其他功能。这个较小的子元素应该对单击事件而不是父超链接做出反应。遗憾的是 event.preventDefault() 也不能正常工作。
  • 这样不行。您可以让孩子工作或锚标签工作。更改标记并将子项(可单击)移出锚标记。你可以通过 CSS 作弊让它看起来像是在锚标签内。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 2023-01-22
相关资源
最近更新 更多