#javascript #html #css
#javascript #HTML #css
Вопрос:
У меня есть простой код, в котором есть 4 контейнера с кнопками. Теперь я попытался сделать весь элемент интерактивным для перенаправления на сайт, специфичный для контейнера.
Один элемент, подобный приведенному у меня в примере, работает нормально, но когда я добавляю более одного, другие не будут работать.
Существует facebook, youtube, Google и контейнер Twitter, и у каждого из них есть определенная ссылка для перенаправления.
Итак, мне нужно сделать более одного элемента корректно интерактивным не только на кнопке, но и на всем элементе.
var el = document.getElementById("container");
if (el.addEventListener) {
el.addEventListener("click", function() {
document.getElementById("button").click();
}, false);
} else {
el.attachEvent("onclick", function() {
document.getElementById("button").click();
});
}
#container {
background: coral;
padding: 32px;
margin: 16px;
cursor: pointer;
}
<div id="container">
<a id="button" href="https://google.sk/">Google</a>
</div>
<div id="container">
<a id="button" href="https://youtube.com/">Youtube</a>
</div>
<div id="container">
<a id="button" href="https://facebook.com/">Facebook</a>
</div>
<div id="container">
<a id="button" href="https://twitter.com/">Twitter</a>
</div>
Комментарии:
1. идентификатор должен быть уникальным
2. попробуйте использовать разные идентификаторы или изменить селектор с помощью class
3. @AlibiGhazi когда я использую скрипт выбора класса, он не будет работать и будут разные идентификаторы, но у меня сотни таких элементов, поэтому разные идентификаторы будут проблемой: D
4. @tarkh да, но когда я использую скрипт выбора класса, он не будет работать
5. Попробуйте обернуть div тегом привязки, подобным so
<a href="google.sk"><div class="container">google</div></a>
выполнение того, что вы сейчас делаете в своем коде, не сработает
Ответ №1:
В структуре HTML, id
должно быть уникальным, вы можете использовать class
вместо этого, но вам также нужно затем перебирать эти элементы (фрагмент приведен ниже)
var elements = document.querySelectorAll(".container");
elements.forEach(el => {
if (el.addEventListener) {
el.addEventListener("click", function() {
el.querySelector(".button").click();
}, false);
} else {
el.attachEvent("onclick", function() {
el.querySelector(".button").click();
});
}
});
.container {
background: coral;
padding: 32px;
margin: 16px;
cursor: pointer;
}
<div class="container">
<a class="button" href="https://google.sk/">Google</a>
</div>
<div class="container">
<a class="button" href="https://youtube.com/">Youtube</a>
</div>
<div class="container">
<a class="button" href="https://facebook.com/">Facebook</a>
</div>
<div class="container">
<a class="button" href="https://twitter.com/">Twitter</a>
</div>
Мне просто любопытно — почему вы хотите обрабатывать click с помощью JavaScipt? Вместо этого вы можете справиться с этим с помощью:
<a href="google.sk">
<div class="container">google</div>
</a>
Вы пробовали этот подход вместо этого?
Ответ №2:
Вот код, как это сделать с помощью простой функции javascript.
function gohere(url) {
location.replace(url)
}
#container {
background: coral;
padding: 32px;
margin: 16px;
cursor: pointer;
}
<div onclick="gohere('https://google.sk/')" id="container">
Google
</div>
<div onclick="gohere('https://youtube.com/')" id="container">
Youtube
</div>
<div onclick="gohere('https://facebook.com/')" id="container">
Facebook
</div>
<div onclick="gohere('https://twitter.com/')" id="container">
Twitter
</div>
Ответ №3:
Вы не должны использовать ‘id’, когда у вас на странице более одного элемента. Вместо этого рекомендуется использовать классы css.
Что вы можете сделать, так это использовать document.querySelectorAll('.some-class-here')
, а затем выполнить итерацию в каждом элементе, чтобы применить прослушиватель событий click.
Чтобы сделать весь элемент интерактивным, я бы использовал один из трех подходов:
- Вариант, который мне нравится, — это добавить отступ в кнопку, чтобы кнопка / ссылка заполняла все пространство контейнера таким образом, чтобы весь контейнер был кликабельным
- Поместите контейнер внутри ссылки
- Вам пришлось бы создать функцию javascript, которая будет получать элемент, на который нажимается, и считывать некоторые данные, относящиеся к элементу, на который будет дана ссылка, например
data-link="http://google.com"
. С помощью этих данных вы можете использоватьlocation
для перенаправления или открытия ссылки в новой таблице.