在Javascript函数中声明变量

时间:2011-10-07 06:42:38

标签: javascript

我是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
   }

2 个答案:

答案 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){