Ich habe eine einfache Login-Form mit einem Benutzernamen Feld (erforderlich), eine Login-Schaltfläche, eine Schaltfläche Abbrechen und ein Passwort vergessen. Das Feld Benutzername hat den Schwerpunkt auf das Laden von Seiten.Angular ngMessages Validierung auf Unschärfe kündigt Link/Button Klicks
Ich verwende ngMessages, um Validierungsfehler anzuzeigen, und in diesem einfachen Beispiel ist die einzige Validierungsregel des Formulars Benutzername erforderlich. Ich möchte den Validierungsfehler beim Laden der Seite nicht anzeigen, nachdem der Benutzer das Feld "Benutzername" verlassen hat. Um dies zu tun, habe ich festgelegt, dass die Meldung Benutzername erforderlich nur angezeigt wird, nachdem sich das Element Benutzername als berührt registriert hat.
Mein Problem tritt auf, wenn ein Benutzer auf die Schaltfläche Abbrechen oder den Link Passwort vergessen klickt, die Validierungsnachricht für den erforderlichen Benutzernamen wird erwartet angezeigt, das Klickereignis für die Schaltfläche oder den Link wird jedoch nie ausgelöst. Dies ist natürlich das korrekte Verhalten für die Übermittlungsschaltfläche, aber nicht für jedes andere Element (Link/Schaltfläche) auf der Seite.
Es scheint nicht wie ngMessages sollte bestimmen, ob Click-Ereignisse abgebrochen werden sollten. Während das in diesem Fall das richtige Verhalten für den Submit-Button ist, bevorzuge ich es, das selbst zu verwalten. Ist das ein Fehler oder habe ich ngMessages oder etwas anderes falsch implementiert?
Edited die Frage gebeten Warum wird die Anzeige einer Bestätigungsnachricht verursacht ein nicht verwandtes Click-Ereignis abgesagt wird vollständig zu klären und wie kann ich das verhindern?
Hier ist ein Plunker: https://plnkr.co/edit/bLWODaWSXowZ4AcgTze9?p=preview
Edited hinzufügen: Im Plunkr, sobald die Seite geladen wird, wenn ein Benutzer auf dem Passwort vergessen Link klickt, sollte die Validierung Fehlermeldung Benutzername Required angezeigt, und die vergessen Das Passwort-Klick-Ereignis sollte ausgelöst werden, wenn auf der Seite mit der Meldung "Gehe zum Zurücksetzen des Passworts" eine Nachricht angezeigt wird. Dieses Klickereignis wird nicht ausgeführt, wenn Sie nicht ein zweites Mal auf den Link Passwort vergessen klicken.
Hier ist der Code:
<form name="buttonFail" novalidate autocomplete="off">
<label for="username">Username</label>
<div>
<input ng-model="ngUsername" id="username" name="username" type="text" required class="ngMessageSample" autofocus />
<div ng-messages="buttonFail.username.$error" class="ngMessagesClass" ng-show="buttonFail.username.$touched">
<div ng-message="required" class="ngMessageClass">* This field is required</div>
</div>
</div>
<button type="submit" ng-click="//do nothing">Log In</button>
<button type="button" ng-click="ngModel.saySomething='Log in cancelled';">Cancel</button>
<br />
<a href="#" ng-click="ngModel.saySomething='Go to password reset';">Forgot password?</a>
<div>{{ngModel.saySomething}}</div>
</form>
https://plnkr.co/edit/hQ5hKQEd9TPQ69asKOO5?p=preview können Sie bitte, ob dies überprüfen, wie erwartet funktioniert? Sie können nicht undefinierte Variable in eckige Vorlage nicht wirklich binden. – Naruto
@Naruto, ich sehe Sie initialisiert die Gültigkeitsbereich-Variable, die ich verwendet habe, aber das ändert nicht das Verhalten der Seite. Wenn der Benutzer das erste Mal auf die Schaltfläche zum Zurücksetzen des Kennworts oder auf die Schaltfläche Abbrechen klickt, wird der Klick nicht registriert. Ich habe deine Änderungen zu meinem Plunkr hinzugefügt. – RockStacker
@RockStacker https://plnkr.co/edit/sDR1KgfoZkd03WvlxL3B?p=preview checkthis – XYZ