2017-02-21 3 views
3

Я был в основном реализует это от W3School: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_accordion_symbolHTML ссылка на внешний JavaScript не работает

Я попытался сделать в JavaScript в отдельный файл с именем accordion.js

var acc = document.getElementsByClassName("accordion"); 
var i; 

for (i = 0; i < acc.length; i++) { 
    acc[i].onclick = function() { 
    this.classList.toggle("active"); 
    var panel = this.nextElementSibling; 
    if (panel.style.maxHeight){ 
     panel.style.maxHeight = null; 
    } else { 
     panel.style.maxHeight = panel.scrollHeight + "px"; 
    } 
    } 
} 

и попытался вызова файла JavaScript через HTML:

<script type="text/javascript" src="accordion.js"></script> 

Может ли кто-нибудь сказать мне, что я могу сделать, чтобы исправить это и помочь объяснить, почему он этого не сделал Работа?

+0

Является ли файл JS в том же каталоге, что и файл HTML? – Steveo

+1

Добавьте свой скрипт непосредственно перед концом тела или добавьте 'window.addEventListener ('load', function() {})' –

+1

Является ли тег скрипта в теле * после * элементом 'accordion'? –

ответ

1

В зависимости от того, какие ошибки вы можете получить, это похоже на то, что файл JS находится не в том же каталоге.

2

Просто, чтобы добавить немного больше ответа, данного в комментариях:

Вот длинный ответ на эту тему: Load and execution sequence of a web page?.

Но, если мы упростим, синтаксический разбор HTML является синхронным. Браузер должен разобрать HTML, прежде чем он может получить доступ к DOM через javascript, в вашем случае:
var acc=document.getElementsByClassName("accordion");

Именно поэтому, а также для предотвращения ошибок, как вы были, что $(document).ready() из jQuery очень известен https://learn.jquery.com/using-jquery-core/document-ready/

Смежные вопросы