IE中的ajax隐藏div问题

时间:2009-05-22 15:43:56

标签: javascript ajax

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

如果电子邮件收到错误,则显示在div标签中,但不适用于用户名(在所有浏览器中)

下面是我的代码:

<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>

2 个答案:

答案 0 :(得分:0)

我看到你的函数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();           
  }
};

答案 1 :(得分:0)

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

编辑:

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

没有任何明显的事情发生在我身上。尝试使用VS或VWDE逐步执行代码: http://www.berniecode.com/blog/2007/03/08/how-to-debug-javascript-with-visual-web-developer-express/