2010-12-12 63 views
6

Je suis bloqué sur ce que je pensais être une simple erreur PEBCAK de ma part. J'essaie de vérifier que toutes mes fonctions sont vraies avant que je soumette un formulaire, mais je ne peux pas comprendre pour la vie de moi ce qui ne va pas. Ci-dessous mon code javascript:Vérifiez si plusieurs fonctions sont vraies, puis faites quelque chose

function checknewaccount(){ 
if(emailvalid()&& checkname() && passwordcheck()) 
{ 
    return true; 
} 
else{ 
    return false; 
} 
} 


function emailvalid() 
{ 
     if(email condition) 
     { 
      return true; 
     } 
     else { 
      return false; 
     } 
} 

function checkname()) 
{ 
     if(name condition) 
     { 
      return true; 
     } 
     else { 
      return false; 
     } 
} 

function passwordcheck(){ 
     if(password condition) 
     { 
      return true; 
     } 
     else { 
      return false; 
     } 
} 

html ci-dessous:

<form id="newaccount" name="newaccount" method="post" onSubmit="accountcode.php"> 
<input type="text" id="email" onBlur="emailvalid()"/> 
<input type="text" id="username" onBlur="checkname()" /> 
<input type="password" id="password" onkeyup="passwordcheck()"/> 
<input type="submit" value="New" onClick="return checknewaccount()"/> 
</form> 

Lorsque je clique sur « Nouveau, rien ne se passe, et je sais que le accountcode.php ne fonctionne pas, parce que rien ne se passe sur la fin de la base de données et il n'y a pas d'erreurs signalées.

pour résumer, ma question est de savoir comment checknewaccount() ne fonctionne pas? At-il quelque chose à voir avec la façon dont je les appelle?

I a m new to javascript donc si je suis complètement hors de ma mise en œuvre, je m'excuse. Merci beaucoup pour l'aide!

+0

Ok désolé, je nettoyais mon code dans la question et je l'espère plus de sens à tout le monde. Désolé à ce sujet plus tôt. – Siriss

+0

petit conseil si vous voulez marquer code 'snippets' dans les commentaires, utilisez un backtick' (à gauche de 1 sur kbd) avant et après le code – Basic

Répondre

4

vous avez la syntaxe incorrecte - onsubmit = le nom de la fonction js à appeler, action = l'url ...

<form action="accountcode.php" id="newaccount" name="newaccount" method="post" onSubmit="return checknewaccount()"> 
<input type="text" id="email" onBlur="emailvalid()"/> 
<input type="text" id="username" onBlur="checkname()" /> 
<input type="password" id="password" onkeyup="passwordcheck()"/> 
<input type="submit" value="New"/> 
</form> 

Code Testée:

<html> 
    <head> 
     <script type="text/javascript"> 
     function checknewaccount() { 
      return emailvalid() && checkname() && passwordcheck(); 
     } 

     function emailvalid() { 
      var emailAddress = document.getElementById('email').value; 
      return (emailAddress=='test'); 
     } 

     function checkname() { 
      return true; 
     } 

     function passwordcheck() { 
      return true; 
     } 

     </script> 
    </head> 
    <body> 
    <form action="#" onsubmit="return checknewaccount();"> 
     <input type="text" id="email" name="email"/> 
     <input type="submit"/> 
    </form> 
    </body> 
</html> 

Le formulaire dans le code ci-dessus ne soumettront si la zone de texte a une valeur de essai

Une mise en œuvre un peu mieux serait:

<html> 
    <head> 
     <script type="text/javascript"> 
     function checknewaccount() { 
      if(emailvalid() && checkname() && passwordcheck()) { 
       return true; 
      } else { 
       document.getElementById('validation').innerHTML = 'Validation failed!'; 
       return false; 
      } 
     } 

     function emailvalid() { 
      var emailAddress = document.getElementById('email').value; 
      return (emailAddress=='test'); 
     } 

     function checkname() { 
      return true; 
     } 

     function passwordcheck() { 
      return true; 
     } 

     </script> 
    </head> 
    <body> 
    <div id="validation"></div> 
    <form action="#" onsubmit="return checknewaccount();"> 
     <input type="text" id="email" name="email"/> 
     <input type="submit"/> 
    </form> 
    </body> 
</html> 

Comme cela indique au moins u ser le formulaire n'a pas été soumis. Mieux encore serait de donner à l'utilisateur une raison plus détaillée pourquoi, mais c'est au-delà de la portée de cette question ...

+0

Je vous suggère également que vous commencez à utiliser 'alerte()' commandes dans votre JS de comprendre ce qui est en cours d'exécution (ou utilisez le module Firebug dans Firefox pour un débogueur JS complet) – Basic

+0

@Basiclife: * "Je voudrais aussi suggérer que vous commencez à utiliser des commandes alert() dans votre JS ... "* ** Dieu no **, il n'y a plus d'excuse * pour * débug-via-alert. Utilisez Firebug (comme vous l'avez mentionné), ou les outils de développement de Chrome, ou Visual Studio, ou ... :-) +1 pour le formulaire, je n'ai même pas regardé le HTML. –

+0

@Basiclife: cela ne fonctionnera pas car ma fonction Javascript checknewaccount() n'appelle pas le fichier accountcode.php. Je souhaite que le javascript confirme que tous les champs sont corrects, puis soumettez le formulaire à accountcode.php. J'ai utilisé return checknewaccount() sur le bouton submit pour qu'il ne soit envoyé que si checknewaccount renvoie true. Je l'ai utilisé dans le passé avec quelque chose comme ce qui suit .... – Siriss

5

Cette partie va bien (je pris la liberté de fixer l'empreinte):

function checknewaccount(){ 
    if(emailvalid()&& checkname() && passwordcheck()) 
    { 
     return true; 
    } 
    else{ 
     return false; 
    } 
} 

Bien que vous puissiez l'améliorer:

function checknewaccount(){ 
    return emailvalid() && checkname() && passwordcheck(); 
} 

Cette partie est une erreur de syntaxe (pour le moins):

function emailvalid(), checkname(), passwordcheck(){ 
if(condition){ 
    return true;} 
else{return false;} 

Si ce n'est pas une réelle citation de votre code, vous devrez mettre à jour yo question (bien que je ne sois pas ici pour mettre à jour cette réponse). Il ne sert pas à grand-chose de poser des questions sur le code et de citer ensuite du pseudo-code dans la question. (. À tout le moins, le pseudo-code manque le } final)

Le même genre de chose est vrai pour vos fonctions sous la forme:

function emailvalid() 
{ 
     if(email condition) 
     { 
      return true; 
     } 
     else { 
      return false; 
     } 
} 

C'est bien (en supposant que email condition est encore psuedocode), mais il n'y a pas besoin pour le if:

function emailvalid() 
{ 
    return email condition; 
} 

En termes de « rien ne se passe, » assurez-vous que vous avez des outils de débogage, vous pouvez nous e. Chrome a intégré les Outils de développement, appuyez simplement sur Ctrl + Maj + I. Pour Firefox, vous pouvez installer l'excellent Firebug. Les versions récentes d'Internet Explorer intègrent également des outils de développement (pour les anciennes versions, vous pouvez télécharger une version gratuite de Visual Studio pouvant être connectée au navigateur). N'importe lequel d'entre eux vous dira à propos de la syntaxe et d'autres erreurs, vous permettra de parcourir votre déclaration de code par déclaration, etc., ce qui est essentiel pour comprendre ce qui se passe.

Voici une version rapide de ce que je pense que vous essayez de faire. Je ne le ferais pas de cette façon, mais je l'ai fait les changements minimes pour le faire fonctionner:

HTML:

<form action="http://www.google.com/search" 
     method="GET" target="_blank" 
     onsubmit="return checknewaccount()"> 
<input type="text" id="email" name='q' onblur="emailvalid()"> 
<input type="text" id="username" onblur="checkname()" > 
<input type="password" id="password" onkeyup="passwordcheck()"> 
<input type="submit" value="New"> 
</form> 

Remarques sur ce point:

  • Comme Basiclife pointed out, votre form le code a des problèmes. Ceux-ci sont fixés ci-dessus.
  • Ci-dessus j'ai utilisé action="http://www.google.com/search" mais bien sûr pour vous ce serait action="accountcode.php" (ou du moins, je pense que ce serait le cas).
  • Utilisez le onsubmit pour le gestionnaire de soumission de formulaire, et non onclick sur le bouton Envoyer. Vous ne pouvez pas annuler une soumission de formulaire de façon fiable via le bouton de soumission onclick.
  • En onsubmit, assurez-vous d'utiliser return   — par exemple, onsubmit="return checknewaccount()", pas onsubmit="checknewaccount()"   — parce que nous voulons nous assurer que les choses de l'événement voit la valeur de retour. Nous ne nous soucions pas si la substance de l'événement ne voit pas la valeur de retour de nos autres contrôles (onblur="emailvalid()"), mais si nous l'avons fait, nous aurions besoin de return là aussi. Un seul des champs ci-dessus a un attribut name; aucun de vous ne le fait. Seuls les champs avec name attributs sont soumis avec des formulaires. J'ai seulement utilisé un name pour mon exemple parce que je veux seulement soumettre un champ à Google, mais pour vos buts, vous allez vouloir name attributs sur chacun des trois champs. This brief article a une discussion de id par rapport à name et à quoi ils servent. Vous voulez parfois les deux.
  • J'ai mis les attributs en minuscules, ce qui est la meilleure pratique (et nécessaire si vous voulez utiliser XHTML).
  • Cependant, j'ai supprimé le / des extrémités du inputs. C'est un peu hors sujet, mais au niveau apparent où vous travaillez, vous ne voulez pas essayer d'utiliser XHTML, utilisez HTML. L'utilisation correcte de XHTML est techniquement difficile, à la fois dans la création et la configuration du serveur, et même dans ce cas, vous devez le servir comme tag-soupe à IE ou il ne le traitera pas correctement. XHTML a sa place, mais dans la grande majorité des cas, il n'y a aucune raison de l'utiliser.
  • Avec ce qui précède combiné avec le JavaScript ci-dessous, il n'y a aucun but que ce soit pour les gestionnaires sur les champs individuels. Je les ai laissés, cependant, parce que je suppose que vous faites plus que les contrôles ci-dessous   — il y a un exemple plus bas montrant ces gestionnaires qui font quelque chose d'utile.

JavaScript:

function checknewaccount() { 
    return emailvalid() && checkname() && passwordcheck(); 
} 

function emailvalid() { 
    var element; 

    // Get the email element 
    element = document.getElementById('email'); 

    // Obviously not a real check, just do whatever your condition is 
    return element.value.indexOf('@') > 0; 
} 

function checkname() { 
    var element; 

    // Get the username element 
    element = document.getElementById('username'); 

    // Obviously not a real check, just do whatever your condition is 
    return element.value.length > 0; 
} 

function passwordcheck() { 
    var element; 

    // Get the username element 
    element = document.getElementById('password'); 

    // Obviously not a real check, just do whatever your condition is 
    return element.value.length > 0; 
} 

Live copy

Les choses changent légèrement si le emailvalid, et. Al., Les fonctions vont faire quelque chose pour l'utilisateur que les champs ne sont pas valides, par exemple en mettant en valeur leurs étiquettes:

HTML:

<form action="http://www.google.com/search" 
     method="GET" target="_blank" 
     onsubmit="return checknewaccount()"> 
<label>Email: 
<input type="text" id="email" name='q' onblur="emailvalid()"></label> 
<br><label>Username: 
<input type="text" id="username" onblur="checkname()" ></label> 
<br><label>Password: 
<input type="password" id="password" onkeyup="passwordcheck()"/></label> 
<br><input type="submit" value="New"> 
</form> 

JavaScript:

function checknewaccount() { 
    var result; 
    // Because we're actually doing something in each of the 
    // three functions below, on form validation we want to 
    // call *all* of them, even if the first one fails, so 
    // they each color their field accordingly. So instead 
    // of a one-liner with && as in the previous example, 
    // we ensure we do call each of them: 
    result = emailvalid(); 
    result = checkname() && result; 
    result = passwordcheck() && result; 
    return result; 
} 

function emailvalid() { 
     var element, result; 

    // Get the email element 
    element = document.getElementById('email'); 

    // Obviously not a real check, just do whatever your condition is 
    result = element.value.indexOf('@') > 0; 

    // Update our label and return the result 
    updateLabel(element, result); 
    return result; 
} 

function checkname() { 
    var element, result; 

    // Get the username element 
    element = document.getElementById('username'); 

    // Obviously not a real check, just do whatever your condition is 
    result = element.value.length > 0; 

    // Update our label and return the result 
    updateLabel(element, result); 
    return result; 
} 

function passwordcheck() { 
    var element, result; 

    // Get the username element 
    element = document.getElementById('password'); 

    // Obviously not a real check, just do whatever your condition is 
    result = element.value.length > 0; 

    // Update our label and return the result 
    updateLabel(element, result); 
    return result; 
} 

function updateLabel(node, valid) { 
    while (node && node.tagName !== "LABEL") { 
    node = node.parentNode; 
    } 
    if (node) { 
    node.style.color = valid ? "" : "red"; 
    } 
} 

Live copy

+0

Oublier l'erreur de syntaxe, ce qui est le point d'avoir trois fonctions si elles sont toutes les mêmes ? – nico

+0

@nico Je suppose qu'ils ne sont pas - la "condition" varie dans chaque. – Basic

+0

@Basiclife: Oui, c'est mon hypothèse aussi, mais ... –