我在这里看到了这个问题的几个版本,但没有一个与我的问题看起来是一样的,所以我想创建一个新的问题。我必须在这里做一些非常愚蠢的事情,但在我的生活中,我无法发现它。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