2009-05-22 11 views
1

J'ai une page javascript qui vérifie un e-mail et un nom d'utilisateur, cela fonctionne très bien dans tous les navigateurs, mais Internet Explorer. La boîte div où les erreurs sont affichées doit être masquée sauf si une erreur est donnée, par ex. nom d'utilisateur pris ou email invalide.ajax hidding div problème dans IE

Si l'e-mail obtient une erreur cela est indiqué dans la balise div, mais le travail ne marche pas pour le nom d'utilisateur (dans tous les navigateurs)

ci-dessous est mon code:

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

Vous devriez vraiment travailler votre problème dans un cas plus petit reproductible - peu de gens voudront lire la valeur d'une page entière de HTML que vous avez collé dans une question. – levik

Répondre

0

Je vois votre fonction stateck () est la fonction de retour de la requête HTTP. Cependant, vous le définissez dans une autre fonction. Pas comme une fonction anonyme, mais juste comme une fonction dans une autre fonction.

Je vois ce que vous faites maintenant ... ok, essayez ceci:

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();   
    } 
}; 
+0

La fonction stateck() doit être utilisée deux fois dans deux fonctions différentes. – Elliott

+0

Merci de remplacer la fonction de vérification par courrier électronique? comme je reçois httpxml n'est pas défini? – Elliott

0

Avez-vous besoin de définir votre état initial à display: none? Je pense que IE peut initialiser les divs avec une hauteur non-0 alors que les divs peuvent être techniquement visibles dans d'autres navigateurs mais trop courts pour voir.

Edit:

D'accord, je pense que je mal compris votre question. Votre problème n'est pas de cacher les divs mais d'afficher des erreurs pour le nom d'utilisateur.

Rien ne me saute aux yeux. Essayez de parcourir le code en utilisant VS ou VWDE: http://www.berniecode.com/blog/2007/03/08/how-to-debug-javascript-with-visual-web-developer-express/

+0

Je ne pense pas parce que les divs ne sont pas "appelés" à afficher jusqu'à ce qu'une erreur soit donnée. – Elliott