在Javascript函数中声明变量
问题描述:
我是JavaScript新来的。最近我试图准备一个checkform函数,尽管这个函数起作用,IE提到最后没有声明“msg2”,可能请专家教我如何让它工作?非常感谢!在Javascript函数中声明变量
function check_si_form_info(form,mark,edit){
if(mark==11 || mark=="all"){
if(form.login.value==""){
si_check_login.innerHTML="Please enter Login Name!";
si_check_login.style.height="auto";
form.login.style.backgroundColor="#FFD5FF";
return false;
}else if (form.login.value!==""){
var loginname = form.login.value;
xmlhttp=new XMLHttpRequest();
xmlhttp.open('get','si/check_si_loginname.php?loginname='+loginname,true);
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
msg2 = xmlhttp.responseText;
if(msg2 == '2'){
si_check_login.innerHTML="Login name is not available!";
si_check_login.style.height="auto";
form.login.style.backgroundColor="#FFD5FF";
return false;
}else if(msg2 == '1'){
si_check_login.innerHTML="";
si_check_login.style.height="0px";
form.login.style.backgroundColor="#FFFFFF";
}
}//200
}//4
}//onreadystatechange
xmlhttp.send(null);
}
if (msg2 == '2'){
return false;
}
}//11
}
答
要声明一个变量,在您目前的开头,当你的函数体的末尾已经达到了加var msg2;
,msg2
还没有定义。此外,除非您希望它们泄漏到全局范围,否则您应该使用var
声明所有变量(xmlhttp
)。
变量可以在某些方面进行定义:
-
var msg2;
在函数内部:这声明一个私有变量,初始化它在undefined
-
var msg2;
函数外:声明的变量。如果内部函数包含在另一个范围内,则为私有,例如function outer(){var msg2;function inner(){...}}
。否则公开。 -
msg2=null;
任何地方:这ASSIGNSnull
到变量msg2
。如果它已被定义,请参阅上一行。否则,它将被公开定义。
考虑您的代码:
function check_si_form_info(form,mark,edit){
var msg2;// <-- Declare a variable
if(mark==11 || mark=="all"){
if(form.login.value==""){
...
return false;
}else if (form.login.value!==""){
var loginname = form.login.value;
xmlhttp=new XMLHttpRequest();
xmlhttp.open('get','si/check_si_loginname.php?loginname='+loginname,true);
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readyState == 4){
if(xmlhttp.status == 200){
msg2 = xmlhttp.responseText;
if(msg2 == '2'){
...
form.login.style.backgroundColor="#FFD5FF";
return false; // <--- false isn't received by any func
}else if(msg2 == '1'){
...
}
}//200
}//4
}//onreadystatechange
xmlhttp.send(null);
}
if (msg2 == '2'){ //<---This condition is always false
return false;
}
答
声明msg2
作为一个全局变量那么只有你访问它的功能之外。
,就把这行的功能
var msg2 ="";
function check_si_form_info(form,mark,edit){
前