要搞清楚這個問題,你必須理解JavaScript如何得到包括來自外部資源的頁面,瀏覽器如何構建DOM上。
當包括兩個腳本標記:
<script src="jquery.js"></script>
<script src="foo.js"></script>
首先是下載並執行,那麼第二個被下載並執行。如果在第一個腳本中定義了一個屬性,例如window.hello
,則可以在第二個腳本中訪問它,因爲第二個腳本會在第一個腳本完成之後下載並執行。如果腳本以其他順序運行,則該屬性將不可用。
只要將代碼包含在頭部vs正文中,就必須考慮代碼執行時相對於瀏覽器解析html並創建DOM。瀏覽器從頭到尾讀取html,因此,當它到達頭部的腳本標記時,主體節點還不存在。這就是爲什麼你的代碼不能工作的原因。爲了使它工作在頭上,你必須以某種方式告訴你的代碼等到元素存在。要解決這種情況最常見的方法是使用DOMContentLoaded的事件,你可以綁定到同:
$(document).ready(function(){
// my code here
});
您也可以使用窗口加載事件。
$(window).on("load",function(){
// my code here
})
這是更好地使用DOMContentLoaded除非你的代碼需要獲得元素的寬度或高度,因爲它會發生更早。
第三個選擇是使用事件委託,但它確實不適合您的用例。
$(document).on('click','#paragraph',function() {
$('#paragraph').hide();
});
這通常是一個更好的主意,有結束標記之前你的JavaScript,但它往往不是很容易與許多MVC和CMS系統來這樣做的。
所以你通過CDN加載「hide.js」?什麼是「本地js」呢? –
@ChrisHardie本地js是上面定義的。我將使用CDN作爲其他功能。 –
本地JS = hide.js對此感到抱歉 –