как сделать так, чтобы элемент не работал как href во всей карточке href - PullRequest
1 голос
/ 30 мая 2020

enter image description here

Итак, у меня есть эта карточка, которая работает как целая ссылка, но внутри у меня есть значок под тегом span, и я не хочу, чтобы он работал поскольку ссылка на карту просто действует как значок, я могу решить эту проблему, если не сделаю всю карту href, но тогда мне придется вручную преобразовать все необходимые элементы, присутствующие внутри карты, в href, что, как мне кажется, не Неэффективно и аккуратно. Итак, любые предложения о том, как мне go отсюда?

.card {
  width: 250px;
  height: 350;
  border-radius: 10px;
  box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
  background-color: white;
  margin-left: 30px;
  margin-right: 30px;
  margin-top: 30px;
  margin-bottom: 30px;
  cursor: pointer;
}

.top {
  display: flex;
  justify-content: space-between;

}

.year {
  padding-top: 5px;
  padding-left: 5px;
  font-family: Circular Std Book;

}

.span-bookmark {
  padding-left: 5px;
  cursor: pointer;

}



{% for m in mlist %}
    <div class="card">
        <a href="http://www.google.com/search?q={{m.Name}}" target="_blank">
            <div class="top">
                <div class="year">{{m.Year}}</div>
                <span class="span-bookmark"><i class="material-icons bookmark" id="bookmark-style">bookmark</i></span>
            </div>

            <div class="middle">
                <div class="img-container"><img src="{{ m.Image.url }}"></div>
            </div>

            <div class="bottom">
                <div class="title">{{m.Name}}</div>
                <div class="target_id">{{m.targetid}}</div>
            </div>
        </a>
    </div>
{% endfor %}

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Вы можете остановить навигацию с помощью preventDefault и остановить переход к ссылке с помощью stopPropagation .

В следующей демонстрации при нажатии на img не всплывает вверх по DOM. Щелчок по div за пределами img пузырей до A, как и нажатие на текст A.

function showStuff(event) {
  // Stop default action, e.g. following a link
  event.preventDefault();
  // Stop click from bubbling, e.g. to link parent
  event.stopPropagation();
  // Just for demonstration purposes, delete when no longer required
  console.log('Click from ' + event.target.tagName +
    ' reached ' + event.currentTarget.tagName);
}

window.onload = function() {

  // This listener is for demo only and prevents following the link
  // Don't add it if you want to follow the link for clicks outside the img
  let link = document.querySelector('a');
  link.addEventListener('click', showStuff, false);

  // This listener stops clicks from the img reaching the A and
  // stops navigation from clicks on the img
  let img = document.querySelector('img');
  img.addEventListener('click', showStuff, false);
}
.card {
  width: 250px;
  height: 350;
  border-radius: 10px;
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2);
  background-color: white;
  margin: 30px;
  cursor: pointer;
  border: 1px solid green;
}

.middle {
  margin: 20px;
  border: 1px solid blue;
}

img {
  height: 50px;
  width: 50px;
  margin: 20px;
  border: 1px solid red;
  cursor: default;
}
<div class="card">
  <a href="http://www.google.com/search?q={{m.Name}}" target="_blank">Some link text
    <div class="middle">
      <div class="img-container"><img src="foo.jpg"></div>
    </div>
    Some more link text
  </a>
</div>
1 голос
/ 30 мая 2020

Убедитесь, что у вас установлена ​​позиция как для карты, так и для значка div. Затем установите z-index для значка, который находится выше карты в вашем css. Затем, если вы назначите значок интерактивным, он не будет щелкать ссылку карты, когда вы щелкаете значок. Вы можете использовать z-index, чтобы расположить все слои на вашей карточке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...