вот код HTML, включая JS и я хочу, чтобы JS был внешним файлом, но он не будет работать, как его решить и заставить элемент двигаться при нажатии, когда он внешний
<script>
var acc = document.getElementsByClassName("accordion");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.display === "block") {
panel.style.display = "none";
} else {
panel.style.display = "block";
}
});
}
</script>



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно поместить теги script после элементов (перед </body>) или обернуть в обработчик загрузки:
window.addEventListener("DOMContentLoaded", function() {
var acc = document.getElementsByClassName("accordion");
.....
})
Также вы, вероятно, захотите делегировать из контейнера аккордеона вместо цикла
document.getElementById("accordionContainer").addEventListener("click", function(e) {
const tgt = e.target.closest(".accordion");
if (tgt) tgt.classList.toggle("active");
tgt.nextElementSibling.classList.toggle("hide", !tgt.classList.contains("active"));
})
если вы хотите использовать внешний JS-файл внутри вашего html-файла затем вам нужно поместить тег script в заголовок html-файла
<head>
<script src = "file.js" defer></script>
</head>
Пожалуйста, посетите центр помощи, возьмите тур, чтобы увидеть, что и Как спросить. Если вы застряли, опубликуйте минимальный воспроизводимый пример вашей попытки, отметив ввод и ожидаемый вывод с помощью редактора фрагментов [<>].