#javascript #html #css
Вопрос:
Я пытаюсь создать раскрывающийся список, используя CSS и JavaScript.
document.querySelector('.dropdown-btn').addEventListener("click", function() {
let list = document.getElementById("project-list");
if (list.style.display === "none") {
list.style.display = "inline-block";
} else {
list.style.display = "none";
}
});
#project-list {
list-style-type: none;
display: none;
position: relative;
}
<ul>
<li class="projects">Projects
<button class="dropdown-btn">Show<i class="fas fa-angle-double-down"></i></button>
<br>
<ul id="project-list">
<li><a href="#">Hello</a></li>
<li><a href="#">World</a></li>
</ul>
</li>
</ul>
Вы можете попробовать это здесь. Он реагирует после одного дополнительного щелчка, но я не могу понять причину. Я изучаю переднюю часть. Как я могу это исправить?
Ответ №1:
Проблема в том, что list.style.display
при первом нажатии на кнопку появляется пустая строка. Вам также нужно проверить это:
document.querySelector('.dropdown-btn').addEventListener("click", function() {
let list = document.getElementById("project-list");
if (!list.style.display || list.style.display === "none") {
list.style.display = "inline-block";
} else {
list.style.display = "none";
}
});
#project-list {
list-style-type: none;
display: none;
position: relative;
}
<ul>
<li class="projects">Projects
<button class="dropdown-btn">Show<i class="fas fa-angle-double-down"></i></button>
<br>
<ul id="project-list">
<li><a href="#">Hello</a></li>
<li><a href="#">World</a></li>
</ul>
</li>
</ul>
Комментарии:
1. На самом деле нет, css
none
, который вы установили, не может быть получен с помощью JavaScript. Доступ к этомуdisplay
значению получает/задает в DOM, а не в таблице стилей.
Ответ №2:
Кажется, что он реагирует после второго щелчка, потому list.style.display
что при первом щелчке это пустая строка.
Удивлен? Правило CSS применяется к элементу, но не применяется к объекту JavaScript.
Чтобы получить фактический стиль элемента (включая правила CSS и встроенные стили), вы можете использовать getComputedStyle()
.
Например:
document.querySelector('.dropdown-btn').addEventListener("click", function() {
let list = document.getElementById("project-list");
let style = getComputedStyle(list)
if (style.display === "none") {
list.style.display = "inline-block";
} else {
list.style.display = "none";
}
});