J'écris un formulaire de connexion simple en utilisant angularjs avec une validation d'entrée côté client pour vérifier que le nom d'utilisateur et le mot de passe ne sont pas vides et dépassent trois caractères. Voir le code ci-dessous:
<form name="loginform" novalidate ng-submit="login.submit()" class="css-form">
<fieldset>
<div class="control-group input-prepend">
<span class="add-on"><i class="icon-user"></i></span>
<input type="text" ng-model="login.username" name="username" required ng-minlength="3" placeholder="username" />
</div>
<div class="control-group input-prepend">
<span class="add-on"><i class="icon-lock"></i></span>
<input type="password" ng-model="login.password" name="password" required ng-minlength="3" placeholder="" />
</div>
<div class="control-group">
<input class="btn" type="submit" value="Log in">
</div>
</fieldset>
</form>
Et le contrôleur:
var controller = function($scope) {
$scope.login = {
submit: function() {
Console.info($scope.login.username + ' ' + $scope.login.password);
}
}
};
Le problème est que la login.submit
fonction sera appelée même si l'entrée n'est pas valide. Est-il possible d'empêcher ce comportement?
En passant, je peux mentionner que j'utilise également bootstrap et requirejs.
angularjs
validation
Halse runique
la source
la source
Réponses:
Tu peux faire:
Pas besoin de vérifications du contrôleur.
la source
&&
avoir essayé de transmettre la valeur dans le cadre de la soumission et confirmé que la valeur elle-même est "fausse"Remplacez le bouton d'envoi par:
la source
Donc, la réponse suggérée de TheHippo n'a pas fonctionné pour moi, à la place j'ai fini par envoyer le formulaire en tant que paramètre à la fonction comme ceci:
Cela rend le formulaire disponible dans la méthode du contrôleur:
la source
Vos formulaires sont automatiquement placés dans $ scope en tant qu'objet. Il est accessible via
$scope[formName]
Voici un exemple qui fonctionnera avec votre configuration d'origine et sans avoir à passer le formulaire lui-même en tant que paramètre dans ng-submit.
Exemple de travail: http://plnkr.co/edit/BEWnrP?p=preview
la source
if(this.loginform.$invalid)
.. à la place, mais dans le HTML, vous devez donner le nom au formulaire<form name="ctrl.loginform" ..
. Et cela suppose que vous utilisez<div ng-controller="controller as ctrl"..
dans votre contrôleur comme syntaxe. Merci @JoshCarollHTML:
Dans votre contrôleur:
la source
event.preventDefault()
c'est la voie à suivre, pour arrêter la soumission du formulaire.Bien que ce ne soit pas une solution directe pour la question des OP, si votre formulaire se trouve dans un
ng-app
contexte, mais que vous souhaitez qu'Angular l'ignore complètement, vous pouvez le faire explicitement en utilisant lengNonBindable
directive:la source
Juste pour ajouter aux réponses ci-dessus,
J'avais 2 boutons réguliers comme indiqué ci-dessous. (Aucun type = "soumettre" n'importe où)
Peu importe combien j'ai essayé, appuyez sur Entrée une fois que le formulaire était valide , le bouton "Effacer le formulaire" a été appelé, effaçant tout le formulaire.
Pour contourner ce problème,
J'ai dû ajouter un bouton de soumission factice qui était désactivé et masqué. Et ce bouton factice devait être au-dessus de tous les autres boutons comme indiqué ci-dessous .
Eh bien, mon intention n'était jamais de soumettre sur Enter, donc le hack donné ci-dessus fonctionne très bien.
la source
Je sais que c'est un vieux fil mais j'ai pensé que je ferais aussi une contribution. Ma solution étant similaire au post déjà marqué comme réponse. Certaines vérifications JavaScript en ligne font l'affaire.
la source
Je sais qu'il est tard et qu'on m'a répondu, mais j'aimerais partager les trucs sympas que j'ai faits. J'ai créé une directive ng-validate qui accroche le onsubmit du formulaire, puis il émet prevent-default si le $ eval est faux:
Dans votre html:
la source