考虑保存在script.js中的脚本:
if ((typeof window.jQuery) == "undefined") {
var js = document.createElement("script");
var he = document.getElementsByTagName('head')[0];
js.type = "text/javascript";
js.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
he.appendChild(js);
}
$('document').ready(function(){
alert('testing');
});
然后是一个基本的html页面:
<html>
<head>
</head>
<body>
</body>
</html>
<script src=script.js></script>
导致错误:
ReferenceError:$未定义
的script.js
第8行
为什么$未定义?首先是if之后的代码,然后是代码ready()
。这会对文档加载时要调用的回调函数中的代码进行排队吗?
如果我查看Firebug中的代码,jQuery已正确加载。这是在document.read
之后发生的吗?还是我在这里错过的其他东西?
答案 0 :(得分:2)
如果您坚持以这种方式加载脚本,请让浏览器告知您何时可以使用它。
if (typeof jQuery !== "function") {
var js = document.createElement("script");
var he = document.getElementsByTagName('head')[0];
js.type = "text/javascript";
js.src = "http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js";
he.appendChild(js);
js.addEventListener("load", function () {
alert(typeof $); // function
});
}
alert(typeof $); // undefined
旁注:严格检查类型通常会更好。如果window.jQuery
是一个对象,数字或字符串,那么您的代码就不应该没用。