459 Stimmen

HTML5-Formular-Attribut erforderlich. Benutzerdefinierte Validierungsmeldung festlegen?

Ich habe das folgende HTML5-Formular: http://jsfiddle.net/nfgfP/

<form id="form" onsubmit="return(login())">
<input name="username" placeholder="Username" required />
<input name="pass"  type="password" placeholder="Password" required/>
<br/>Remember me: <input type="checkbox" name="remember" value="true" /><br/>
<input type="submit" name="submit" value="Log In"/>

Wenn ich derzeit die Eingabetaste drücke und beide Felder leer sind, erscheint ein Popup-Fenster mit der Meldung "Bitte füllen Sie dieses Feld aus". Wie kann ich diese Standardmeldung in "Dieses Feld kann nicht leer gelassen werden" ändern?

EDITAR: Beachten Sie auch, dass die Fehlermeldung für das Feld type password einfach lautet ***** . Um dies neu zu erstellen, geben Sie dem Benutzernamen einen Wert und klicken Sie auf Senden.

EDITAR : Ich verwende Chrome 10 zum Testen. Bitte tun Sie das Gleiche

2 Stimmen

Oh, +1 für die irrsinnige Meldung zur Validierung des leeren Passworts =/ Wie hat das die QA bestanden, frage ich mich...

7 Stimmen

Warum akzeptieren Sie nicht einfach die Standardmeldung des Browsers? Das sehen die Benutzer bei jeder anderen Website, die sie besuchen. Sie verwirren Ihre Benutzer nur, indem Sie eine nicht standardisierte Meldung erstellen. (Google hat wahrscheinlich mehr UX-Evaluierung und -Tests durchgeführt, um diesen Wortlaut festzulegen, als Sie selbst).

18 Stimmen

@ChrisV Was ist mit mehrsprachigen Websites?

504voto

Somnath Kadam Punkte 5261

Hier ist der Code für die Behandlung benutzerdefinierter Fehlermeldungen in HTML5:

<input type="text" id="username" required placeholder="Enter Name"
  oninvalid="this.setCustomValidity('Enter User Name Here')"
  oninput="this.setCustomValidity('')"/>

Dieser Teil ist wichtig, weil er die Fehlermeldung ausblendet, wenn der Benutzer neue Daten eingibt:

oninput="this.setCustomValidity('')"

0 Stimmen

Funktioniert perfekt mit Firefox 29.0 und Chrome 34.0.1847.137.

0 Stimmen

Perfekt und bis jetzt in FF 38. Behebt einen Fehler in der E-Mail-Validierung, wenn nur oninvalid() verwendet wird.

1 Stimmen

Funktioniert weder in Safari auf dem iPad noch auf dem iPhone. Funktioniert aber wie erwartet in Chrome Desktop.

340voto

robertc Punkte 72049

Verwenden Sie [setCustomValidity](https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/HTML5/Constraint_validation#Constraint_API%27s_element.setCustomValidity()) :

document.addEventListener("DOMContentLoaded", function() {
    var elements = document.getElementsByTagName("INPUT");
    for (var i = 0; i < elements.length; i++) {
        elements[i].oninvalid = function(e) {
            e.target.setCustomValidity("");
            if (!e.target.validity.valid) {
                e.target.setCustomValidity("This field cannot be left blank");
            }
        };
        elements[i].oninput = function(e) {
            e.target.setCustomValidity("");
        };
    }
})

I geändert zu Vanilla JavaScript von Mootools, wie vorgeschlagen von @itpastorn in den Kommentaren, aber Sie sollten in der Lage sein, das Mootools-Äquivalent zu berechnen, falls nötig.

Editar

Ich habe den Code hier aktualisiert als setCustomValidity funktioniert etwas anders, als ich es bei meiner ursprünglichen Antwort verstanden habe. Wenn setCustomValidity auf einen anderen Wert als die leere Zeichenkette gesetzt ist, wird das Feld als ungültig angesehen; daher müssen Sie es vor dem Testen der Gültigkeit löschen, Sie können es nicht einfach setzen und vergessen.

Weiter bearbeiten

Wie im Kommentar von @thomasvdb unten erwähnt, müssen Sie die benutzerdefinierte Gültigkeit in einem Ereignis außerhalb von invalid andernfalls kann es zu einem zusätzlichen Durchlauf durch die oninvalid Handler, um sie zu löschen.

1 Stimmen

Ich habe dies versucht, aber es tritt immer noch ein Fehler auf. Wenn Sie das Feld leer lassen, wird die Meldung angezeigt, dann geben Sie etwas in das Feld ein, aber jetzt wird eine leere Meldung angezeigt und die Aktion wird nicht ausgeführt. Wenn Sie nun erneut auf die Schaltfläche klicken, wird die Aktion ausgeführt.

2 Stimmen

@thomasvdb Versuchen Sie, die benutzerdefinierte Gültigkeit auf eine leere Zeichenfolge in der input Veranstaltung. Im Moment wird es nur gelöscht, wenn die invalid Ereignis ausgelöst wird.

1 Stimmen

Dies ist in der Tat die Lösung. Habe es mit der Lösung von @hleinone herausgefunden. Vielen Dank für die Antwort!

118voto

Ashwini Jain Punkte 1131

Es ist sehr einfach, benutzerdefinierte Nachrichten mit Hilfe von HTML5 Veranstaltung oninvalid

Hier ist der Code:

<input id="UserID"  type="text" required="required"
       oninvalid="this.setCustomValidity('Witinnovation')"
       onvalid="this.setCustomValidity('')">

Dies ist sehr wichtig:

onvalid="this.setCustomValidity('')"

3 Stimmen

Überprüfen Sie auch andere Validierungen wie Muster, Min-/Max-Werte usw... sanalksankar.blogspot.com/2010/12/

10 Stimmen

Dies führt zu einem Fehler in Firefox, bei dem die Validierung beim Aktualisieren erfolgt, jedoch bei Änderungen und Korrekturen fehlschlägt.

12 Stimmen

@RyanCharmley unter Verwendung von onchange="this.setCustomValidity('')" wird der Fehler verschwunden sein. Prüfen Sie meine Antwort unten.

73voto

kzh Punkte 18714

Nota: Dies funktioniert nicht mehr in Chrome, nicht in anderen Browsern getestet. Siehe Änderungen unten. Diese Antwort wird hier als historische Referenz belassen.

Wenn Sie der Meinung sind, dass die Validierungszeichenfolge nicht per Code festgelegt werden sollte, können Sie das title-Attribut des Eingabeelements so einstellen, dass es "Dieses Feld kann nicht leer gelassen werden" lautet. (Funktioniert in Chrome 10)

title="This field should not be left blank."

Véase http://jsfiddle.net/kaleb/nfgfP/8/

Und in Firefox können Sie dieses Attribut hinzufügen:

x-moz-errormessage="This field should not be left blank."

Editar

Das scheint sich geändert zu haben, seit ich diese Antwort geschrieben habe. Das Hinzufügen eines Titels ändert nicht mehr die Gültigkeitsmeldung, sondern fügt der Meldung lediglich einen Zusatz hinzu. Die obige Fiddle gilt immer noch.

Bearbeiten 2

Chrome macht seit Chrome 51 nichts mehr mit dem title-Attribut. Ich bin nicht sicher, in welcher Version sich das geändert hat.

1 Stimmen

Der eigentliche Inhalt der Nachricht bleibt davon unberührt.

2 Stimmen

Zu der Zeit, als ich sie getestet habe, war das der Fall.

3 Stimmen

Mein Fehler, OP hat Chrome 10 angegeben, ich habe FF5 benutzt. Habe die Abwertung entfernt, ich entschuldige mich. Wow, diese Fehlermeldung in Chrome ist die hässlichste was ich je gesehen habe.

54voto

Dharmendra Jha Punkte 471

Es ist sehr einfach, benutzerdefinierte Nachrichten mit Hilfe der HTML5 oninvalid Veranstaltung

Hier ist der Code:

User ID 
<input id="UserID"  type="text" required 
       oninvalid="this.setCustomValidity('User ID is a must')">

9 Stimmen

Es ist erforderlich, die Gültigkeitsmeldung auf leer zu setzen, sobald das Steuerelement eine Eingabe erhält, da sonst bei der ersten Ausführung eine Gültigkeitsmeldung für alle Felder angezeigt wird. Fügen Sie oninput="setCustomValidity('')" hinzu, wenn Sie setCustomValidity() aufrufen. +1 zu Somnaths Antwort.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X