Несколько collapse элементов на странице
Условно. Есть на странице несколько таких элементов
<button class="bab">Кнопка</button> <div class="box" style="display: none"> Содержимое </div> <button class="bab">Кнопка</button> <div class="box" style="display: none"> Содержимое 2</div> И есть java скрипт который должен скрывать и показывать элемент. Однако он не работает. Помогите найти ошибку.
<script>
let coll = document.getElementsByClassName("bab");
for (i = 0; i < coll.length; i++;) {
coll[i].addEventListener('click', function() {
let box = this.nextElementSibling;
if (box.style.display == "none"){
box.style.display = "block";
} else{
box.style.display = "none";
}
})
}
</script>
|
Вы написали лишнюю точку с запятой!
<button class="bab">Кнопка</button>
<div class="box" style="display: none"> Содержимое </div>
<button class="bab">Кнопка</button>
<div class="box" style="display: none"> Содержимое 2</div>
<script>
let coll = document.getElementsByClassName("bab");
for (i = 0; i < coll.length; i++) {
coll[i].addEventListener("click", function() {
let box = this.nextElementSibling;
if (box.style.display == "none") {
box.style.display = "block";
} else {
box.style.display = "none";
}
});
}
</script>
Ваше решение не учитывает то, что могут быть удалены или добавлены элементы! Вот учитывает...
<button class="bab">Кнопка</button>
<div class="box" hidden> Содержимое </div>
<button class="bab">Кнопка</button>
<div class="box" hidden> Содержимое 2</div>
<script>
addEventListener("click", function(event) {
if (!event.target.matches(".bab")) return;
const box = event.target.nextElementSibling;
box.hidden ^= true;
});
</script>
Также можно использовать элемент summary... <details> <summary class="bab">Кнопка</summary> <div class="box"> Содержимое </div> </details> <details> <summary class="bab">Кнопка</summary> <div class="box"> Содержимое 02</div> </details> |
Огромное спасибо. Ваше решение действительно лучшее
|
Добрый вечер использую предложенный вами вариант.
<button class="bab">Кнопка</button>
<div class="box" hidden> Содержимое </div>
<button class="bab">Кнопка</button>
<div class="box" hidden> Содержимое 2</div>
<script>
addEventListener("click", function(event) {
if (!event.target.matches(".bab")) return;
const box = event.target.nextElementSibling;
box.hidden ^= true;
});
</script>
И столкнулся с следующей проблемой. Изредка кнопка не работает. Наблюдается корреляция с количеством кнопок. Примерно это выглядит вот так - https://www.youtube.com/watch?v=zbqH...ature=youtu.be В теме где мало кнопок все хорошо, где много они уже не работают. Никаких ошибок в консоле на замечено, однако hidden упорно отказывается убираться, в чем может быть причина? |
Цитата:
Скрипт должен быть только один на странице! (лучше в <head>)
<script>
addEventListener("click", function(event) {
if (!event.target.matches(".bab")) return;
const box = event.target.nextElementSibling;
box.hidden ^= true;
});
</script>
Элементов, которыми он будет управлять может быть много (идут где-то в <body>) <button class="bab">Кнопка</button> <div class="box" hidden> Содержимое </div> <button class="bab">Кнопка</button> <div class="box" hidden> Содержимое 2</div> Если у вас скрипт добавлен два раза, то при нажатии на кнопку первый откроет содержимое (поскольку оно было скрыто), а второй его тут же закроет (поскольку оно на этот момент было открыто). В итоге это будет выглядеть как будто не открылось. |
| Часовой пояс GMT +3, время: 19:42. |