2017-02-21 94 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之前,他可以通過javascript訪問DOM,你的情況:
var acc=document.getElementsByClassName("accordion");

這就是爲什麼,防止蝽象你有,那$(document).ready()jQuery是非常有名的https://learn.jquery.com/using-jquery-core/document-ready/