2011-10-07 116 views
0

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

回答

0

要声明一个变量,在您目前的开头,当你的函数体的末尾已经达到了加var msg2;msg2还没有定义。此外,除非您希望它们泄漏到全局范围,否则您应该使用var声明所有变量(xmlhttp)。

变量可以在某些方面进行定义:

  • var msg2;在函数内部:这声明一个私有变量,初始化它在undefined
  • var msg2;函数外:声明的变量。如果内部函数包含在另一个范围内,则为私有,例如function outer(){var msg2;function inner(){...}}。否则公开。
  • msg2=null;任何地方:这ASSIGNS 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; 
      } 
0

声明msg2作为一个全局变量那么只有你访问它的功能之外。

,就把这行的功能

var msg2 =""; 
function check_si_form_info(form,mark,edit){