以下JavaScript可在除IE 7和8之外的所有浏览器中正常运行:
if (typeof django != 'undefined') {
console.log('Django admin loaded');
var jQuery = django.jQuery;
}
此代码位于Django管理界面和公共页面中加载的JavaScript文件之上。 Django的管理员加载了自己的jQuery,所以我们最好使用那个...
但是,即使条件(typeof django != 'undefined')
为false
,IE 7和8也会在此if语句中执行变量赋值。同时,console.log()
未执行: - /删除var
关键字,相同的代码在IE 7和8中也能正常运行:
if (typeof django != 'undefined') {
console.log('Django admin loaded');
jQuery = django.jQuery;
}
但为什么呢?这没有任何意义,是吗?
答案 0 :(得分:5)
所有浏览器都会这样做。它被称为hoisting。
function test() {
if( false) {
var abc;
}
alert(abc); // expect ReferenceError, get undefined
}
由于您正在定义jQuery
,因此可能希望将其作为全局变量,因此window.jQuery = django.jQuery
应该可以。
答案 1 :(得分:1)
javascript中没有块范围(请参阅此处了解JS范围的更多详细信息:What is the scope of variables in JavaScript?)。
您的初始代码无论如何都没有多大意义 - 如果您尝试设置全局jQuery变量,那么您的代码应该是:
if (typeof django != 'undefined') {
console.log('Django admin loaded');
jQuery = django.jQuery;
}
您所看到的可能与IE7和8处理其JS范围的方式有所不同。
答案 2 :(得分:0)
如果你定义了var关键字,那么你需要这样做:
if (typeof django != 'undefined') {
console.log('Django admin loaded');
var jQuery = django;
django.jQuery; // or django = django.jQuery
}