这是声明一个全局JavaScript变量的正确方法? 我想它的方式,不工作
$(document).ready(function() {
var intro;
if ($('.intro_check').is(':checked')) {
intro = true;
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function(){
if(this.checked) {
intro = false;
$('.enabled').removeClass('enabled').addClass('disabled');
} else {
intro = true;
if($('.intro').exists()) {
$('.disabled').removeClass('disabled').addClass('enabled');
} else {
$('.intro').wrap('<div class="disabled"></div>');
}
}
});
});
console.log(intro);
如果你定义一个局部变量,你可能想使用某种形式的命名空间。 外面声明命名空间,那么你可以抛出任何你想要进去。 像这样...
var MyProject = {};
$(document).ready(function() {
MyProject.intro = "";
MyProject.intro = "something";
});
console.log(MyProject.intro); // "something"
此声明
var intro;
外面$(document).ready()
因为$(document).ready()
将隐藏从全球范围内的变量。
码
var intro;
$(document).ready(function() {
if ($('.intro_check').is(':checked')) {
intro = true;
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function(){
if(this.checked) {
intro = false;
$('.enabled').removeClass('enabled').addClass('disabled');
} else {
intro = true;
if($('.intro').exists()) {
$('.disabled').removeClass('disabled').addClass('enabled');
} else {
$('.intro').wrap('<div class="disabled"></div>');
}
}
});
});
据@Zakaria评论
其他方式:
window.intro = undefined;
$(document).ready(function() {
if ($('.intro_check').is(':checked')) {
window.intro = true;
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function(){
if(this.checked) {
window.intro = false;
$('.enabled').removeClass('enabled').addClass('disabled');
} else {
window.intro = true;
if($('.intro').exists()) {
$('.disabled').removeClass('disabled').addClass('enabled');
} else {
$('.intro').wrap('<div class="disabled"></div>');
}
}
});
});
注意
console.log(intro);
DOM就绪功能(目前你已经)之外将记录undefined
,但是内DOM就绪时,它会给你真/假。
你外console.log
执行之前DOM已准备就绪执行,因为DOM准备执行后所有资源似乎DOM即DOM准备后,所以我想你会总是得到荒谬结果。
据@ W0rldart的评论
我需要使用它的DOM准备功能之外
您可以使用下面的方法:
var intro = undefined;
$(document).ready(function() {
if ($('.intro_check').is(':checked')) {
intro = true;
introCheck();
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function() {
if (this.checked) {
intro = true;
} else {
intro = false;
}
introCheck();
});
});
function introCheck() {
console.log(intro);
}
变更后的价值intro
我打电话,将与新的价值火的功能intro
。
JavaScript有函数级的变量范围,这意味着你必须声明你的变量以外$(document).ready()
函数。
或可替换地让你的变量具有全局作用域,只要不使用var
关键字如下面的例子所示之前。 但是通常这被认为是不好的做法 ,因为它污染了全球范围内,但它是由你来决定。
$(document).ready(function() {
intro = null; // it is in global scope now
要了解更多内容,请查看:
使用window.intro
内$(document).ready()
是这样的:把intro
你的文件准备好,很好的讨论之外的位置: http://forum.jquery.com/topic/how-do-i-declare-a-global-variable-in-jquery @thecodeparadox是赫然快:P无论如何!
var intro;
$(document).ready(function() {
if ($('.intro_check').is(':checked')) {
intro = true;
$('.intro').wrap('<div class="disabled"></div>');
};
$('.intro_check').change(function(){
if(this.checked) {
intro = false;
$('.enabled').removeClass('enabled').addClass('disabled');
} else {
intro = true;
if($('.intro').exists()) {
$('.disabled').removeClass('disabled').addClass('enabled');
} else {
$('.intro').wrap('<div class="disabled"></div>');
}
}
});
});
不像其他的编程语言,任何变量声明以外的任何功能,将自动成为全球性的,
<script>
//declare global variable
var __foo = '123';
function __test(){
//__foo is global and visible here
alert(__foo);
}
//so, it will alert '123'
__test();
</script>
你的问题是,你声明的变量里面ready()
函数,这意味着它变得可见(范围)里面只有ready()
函数,而不是外面,
解决方案:所以只让全球性的,即宣告这一个以外$(document).ready(function(){});
使用window.intro = "value";
里面准备好功能。 "value"
可能是void 0
,如果你希望它是undefined
您可以定义文档准备函数内部的变量不VAR使它成为一个全局变量。 在JavaScript的任何变量声明不无功自动成为一个全局变量
$(document).ready(function() {
intro = "something";
});
虽然你不能马上使用的变量,但它会被其他函数访问