Javascript ajax在IE中隐藏div问题

Javascript ajax在IE中隐藏div问题,javascript,ajax,Javascript,Ajax,我有一个javascript页面,可以检查电子邮件和用户名,这在除Internet Explorer之外的所有浏览器中都能正常工作。显示错误的div框应隐藏,除非给出错误,例如用户名被占用或电子邮件无效 如果电子邮件中出现错误,这会显示在div标记中,但并不适用于所有浏览器中的username 下面是我的代码: <script type="text/javascript"> var usernameok; var emailok; function che

我有一个javascript页面,可以检查电子邮件和用户名,这在除Internet Explorer之外的所有浏览器中都能正常工作。显示错误的div框应隐藏,除非给出错误,例如用户名被占用或电子邮件无效

如果电子邮件中出现错误,这会显示在div标记中,但并不适用于所有浏览器中的username

下面是我的代码:

<script type="text/javascript">
     var usernameok;
    var emailok;

    function checksubmit()
    {
      if (usernameok && emailok) {
        document.getElementById("button").disabled = false;
      } else {
        document.getElementById("button").disabled = true;
      }
    }

    function username(username)
    {
               make_request();

      function stateck()
      {
        if (httpxml.readyState == 4) { 
          if (httpxml.responseText.indexOf("Username Ok") >= 0) {
                            usernameok = true;
          } else {
                          usernameok = false;
          }
          checkCanSubmit();           
        }
      }

      httpxml.onreadystatechange = stateck;
      user_url = "check_username.php?username=" + username.value;
      httpxml.open("GET", user_url, true);
      httpxml.send(null);
    }

    function email(email)
    {

      make_request();

      function stateck()
      {
        if (httpxml.readyState == 4) {
          if (httpxml.responseText.indexOf("Email Ok") >= 0) {
                          emailok = true;
          } else {
                          emailok = false;
          }
          checkCanSubmit();           
        }
      }

      httpxml.onreadystatechange = stateck;
      email_url = "check_email.php?email=" + email.value;
      httpxml.open("GET", email_url, true);
      httpxml.send(null);
    }
    </script>

我看到您的函数stateck是HTTP请求的返回函数。但是,您正在另一个函数中定义它。不是作为匿名函数,而是作为另一个函数中的函数

我明白你现在在做什么了……好吧,试试这个:

httpxml.onreadystatechange = function()
{
  if (httpxml.readyState == 4) {
    if (httpxml.responseText.indexOf("Email Ok") >= 0) {
      document.getElementById("email").style.backgroundColor = "green";
      document.getElementById("email").style.color = "white";
      document.getElementById("email_div").style.display = 'none';
      emailok = true;
    } else {
      document.getElementById("email").style.backgroundColor = "red";
      document.getElementById("email_div").innerHTML=httpxml.responseText;
      emailok = false;
    }
    checkCanSubmit();           
  }
};

是否需要将初始状态设置为显示:无?我认为IE可能会将div初始化为非0高度,而div在其他浏览器中可能在技术上是可见的,但太短而看不见

编辑:

好吧,我想我误解了你的问题。您的问题不是隐藏div,而是显示用户名错误

没有什么明显的东西向我扑来。尝试使用VS或VWDE单步执行代码:

stateck功能需要在两种不同的功能中同时使用。谢谢。我是否要替换check email功能?正如我所知,httpxml没有定义?我不这么认为,因为在给出错误之前,不会调用div来显示。你真的应该把你的问题缩小到一个更小的可复制的案例中——没有多少人会想通读你粘贴到问题中的整页HTML。