我是Javascript的新手。最近我正在尝试准备一个checkform函数,虽然函数有效,IE提到的“msg2”最后没有声明,请高手请教我如何使其工作?非常感谢!
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
}
答案 0 :(得分:0)
要声明变量,请在“当前”的开头添加var msg2;
,当函数体的末尾到达时,尚未定义msg2
。此外,您应该使用xmlhttp
声明所有变量(var
),除非您希望它们泄漏到全局范围。
可以通过某种方式定义变量:
var msg2;
:这声明一个私有变量,并在undefined
初始化var msg2;
:声明变量。如果内部函数包含在另一个范围内,则为Private,例如function outer(){var msg2;function inner(){...}}
。否则公开。msg2=null;
随时随地:将null
分配给变量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;
}
答案 1 :(得分:0)
将msg2
声明为全局变量,然后只在函数外部访问它。
将此行放在函数
之前var msg2 ="";
function check_si_form_info(form,mark,edit){