我在這裏看到了這個問題的幾個版本,但沒有一個與我的問題看起來是一樣的,所以我想創建一個新的問題。我必須在這裏做一些非常愚蠢的事情,但在我的生活中,我無法發現它。Javascript全局變量不工作
我會與上下文開始,雖然不是特別相關:我jQuery的延遲加載與JS代碼,這意味着沒有我的代碼文件可以包含一個$(document).ready(...)
電話,因爲「$」將是不確定的第一關。相反,我加入我的準備功能,以「全球」陣列,和jQuery負載異步後,我把所有這些功能有以下幾點:
function FireLoadEvents() {
while (OnLoadEvents.length > 0) {
var item = OnLoadEvents.splice(0,1);
item[0].ready();
}
}
現在我的任何頁面組件,我可以使用以下方法來添加一個事件我想火的時候,jQuery是加載和文件實際上是準備:
<script language="text/javascript">
var OnLoadEvents = new Array();
</script>
:
OnLoadEvents.push({ ready: function() { ... } });
我在我的模板在頭部的最頂部定義的變量
正如您所看到的,它在任何函數作用域之外,並且在被引用之前也被聲明。當自己進行測試時,此設置運行良好,但由於某種原因,當它添加到我的實際頁頭時,頁面後面的腳本標記無法將項添加到OnLoadEvents
變量。例如,下面是一個PHP,包括服務器端被拉入我的模板,並增加這些線路到我的網頁正文:
<script type='text/javascript'>
OnLoadEvents.push({ ready: function() {
if ($('.sponsor-link').length != 0) {
...
}
} });
</script>
當我打在Chrome頁面,它報告在以下異常「推」線上面:
Uncaught ReferenceError: OnLoadEvents is not defined
任何想法是怎麼回事?爲什麼OnLoadEvent會在我初始化它的幾行之後未定義?我會注意到,我也嘗試將OnLoadEvents
定義爲window.OnLoadEvents
。
在此先感謝!
爲什麼jQuery會異步加載?腳本通常按順序加載,因此您可以確保jQuery首先加載使用'.ready()'。你使用'async'或'defer'屬性嗎?你使用腳本加載器來加載jQuery? – Joseph
樣式註釋:使用'var OnLoadEvents = [];'而不是'var OnLoadEvents = new Array();'參見:http://yuiblog.com/blog/2006/11/13/javascript-we-hardly-new -ya/ – User
我認爲重要的部分是「如何」將這段代碼添加到頁面中。如果您通過innerHTML添加腳本,它將不會執行腳本。 – epascarello