Comment appeler deux fonctions sur la soumission d'un formulaire
Je suis en train de faire le javascript de validation de formulaire, et pour ce faire j'ai besoin de faire appel à deux fonctions. Pour le mot de passe et le nom d'utilisateur (j'aurai aussi besoin d'appeler plus tard).
Voici mon code JS:
function validateUserName(NewUser)
{
var u = document.forms["NewUser"]["user"].value
var uLength = u.length;
var illegalChars = /\W/; //allow letters, numbers, and underscores
if (u == null || u == "")
{
alert("You left Username field empty");
return false;
}
else if (uLength <4 || uLength > 11)
{
alert("The Username must be between 4 and 11 characters");
return fasle;
}
else if (illegalChars.test(u))
{
alert("The username contains illegal characters");
return false;
}
else
{
return true;
}
}
function validatePassword(pwd, confirmPwd)
{
var p = document.forms["NewUser"]["pwd"].value
var cP = document.forms["NewUser"]["cP"].value
var pLength = p.length;
if (p == null || p == "")
{
alert("You left the password field empty");
return false;
}
else if (pLength < 6 || pLength > 20)
{
alert("Your password must be between 6 and 20 characters in length");
return false;
}
else if (p != cP)
{
alert("Th passwords do not match!");
return false;
}
}
et voici mon formulaire HTML:
<form name = "NewUser" onsubmit= "return validateUserName(), return validatePassword()" action = "">
<tr>
<td>Username:</td>
<td><input type = "text" name = "user"/></td>
</tr>
<tr>
<td class = "Information"><em>Must be 4-11 characters.<br/>Only numbers, letters and underscores.</em></td>
</tr>
<tr>
<td>Password:</td>
<td><input type = "password" name = "pwd"/></td>
<tr>
<td class = "Information"><em>6-20 characters</em></td>
</tr>
<tr>
<td>Confirm Password:</td>
<td><input type = "password" name = "confirmPwd"/></td>
<tr>
<td class = "Information"><em>just in case you didn't make mistakes!</em></td>
</tr>
<input type = "submit" value = "Submit"/>
S'il vous plaît ignorer le code de la table.
Devrais-je plutôt juste de mettre tout ça dans une fonction? Ou est-il un moyen d'appeler les deux fonctions à la fois?
put it all in one function
Son ok pour avoir plusieurs fonctions, comme il est facile à entretenir. Mais, vous devez créer une seule fonction qui s'appelle les deux autres.
vous avez vous-même répondu à la question. Mettre le tout dans une fonction. Appelez simplement commun de la fonction appelée ValidateData et de tout mettre dans un
+1 DannyB. Le cumul des fonctions est sans aucun doute la PIRE façon de résoudre le problème.
OriginalL'auteur entropy | 2013-04-27
Vous devez vous connecter pour publier un commentaire.
Vous avez plusieurs façons d'aborder cette, la méthode la plus simple pour votre jeu actuel serait:
fonction combinée
Le suivant sera exécuté à la fois les fonctions de n'importe quel état est retourné à chaque fois, parce qu'ils ne sont pas exécutées en tant que partie intégrante d'une expression logique qui "court-circuit" lors de l'obtention d'une valeur false:
Et puis dans votre formulaire de balisage:
Si serait probablement judicieux, dans le souci de faire plus de code réutilisable, pour modifier vos fonctions de validation afin qu'ils acceptent un
form
argument. Cela signifie que vous pourriez faire ce qui suit:.. et votre fonction de réception procédez de la manière suivante:
ajouter plusieurs événements
Vous pourriez également mettre en œuvre ce par le moyen préféré de l'application des écouteurs d'événement, qui est d'utiliser
addEventListener
au lieu de l'attribut htmlonsubmit
:Ci-dessus suppose que c'est nécessaire pour soutenir les navigateurs modernes. Si vous souhaitez prendre en charge les anciennes versions d'internet explorer, vous seriez mieux de faire une fonction à appliquer à votre cas de manipulation électronique.g:
Cette deuxième option, il est plus difficile d'exercer un contrôle global sur ce qui est validé, où, quand et dans quel ordre, donc, je vous recommande la première option. Cependant, je voudrais vous recommandons également au moins l'application de votre singulier
submit
gestionnaire à l'aide de la méthode JavaScript ci-dessus, plutôt que d'utiliseronsubmit=""
.OriginalL'auteur Pebbl
Simplement combiner les deux avec la logique ET de l'exploitant:
L'opérateur logique fonctionne comme suit: si le premier opérande est faux, il ne vous embêtez pas avec l'autre, puisque le résultat est faux de toute façon. Si validateUserName() est vrai, alors il va continuer avec validatePassword(). edit: vérifier pebbl de réponse. Semble exactement ce dont vous avez besoin.
OriginalL'auteur Qantas 94 Heavy
Il existe quelques approches. L'une est de créer une fonction, telle que submitForm() qui appelle ensuite vos deux autres fonctions. Peut-être l'utilisation de ces appels de fonction dans le cadre de
if
états à fournir la validation côté client.L'autre méthode consiste à remplacer la valeur par défaut de soumettre la fonctionnalité de la forme, et au lieu d'appeler les fonctions que vous voyez l'ajustement. jQuery fournit une approche facile pour cela. Jetez un oeil à http://api.jquery.com/submit/ pour plus d'informations.
Idéalement, le
validateUser()
etvalidatePassword()
fonctions seraient fusionnés en une fonctionvalidateUser()
. Vous souhaiterez peut-être fournir le code de vos fonctions actuelles pour obtenir des conseils sur la façon de le faire, si vous êtes coincé...Espère que cela aide 🙂
OriginalL'auteur lukeocom
Pourquoi vous êtes la création de deux fonctions différentes pour valider le nom d'utilisateur et mots de passe, par la façon dont vous pouvez aller avec ce trop comme ci-dessous:
Créer un Autre tiers de la Fonction dans laquelle ces deux devez appeler pour vérifier si les deux renvoie la valeur true alors retourner vrai sinon sa montre message ou ce que vous voulez faire.
Voici le code par lequel vous pouvez faire:
Espère que cela va fonctionner pour vous..
OriginalL'auteur Ram Singh
Créer une fonction à appeler tous les validateurs:
HTML
Également votre mot de passe de validation en fonction de vous référer à incorrecte nom du champ.
Code fixe: http://jsfiddle.net/6sB29/
Si vous souhaitez alerter toutes les erreurs (pas seulement la première), vous pouvez essayer quelque chose comme cela:
http://jsfiddle.net/6sB29/1/
Opps - mon mauvais, il semble que vous avez raison.
OriginalL'auteur dfsq
essayer cette
OriginalL'auteur Karan Rajput