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, wenn beide leer sind, wird ein Popup-Fenster mit der Aufschrift "Bitte füllen Sie dieses Feld aus" angezeigt. Wie würde ich diese Standardnachricht in "Dieses Feld darf nicht leer bleiben" ändern?
BEARBEITEN: Beachten Sie auch, dass die Fehlermeldung des Typkennwortfelds einfach lautet *****
. Um dies neu zu erstellen, geben Sie dem Benutzernamen einen Wert und klicken Sie auf Senden.
BEARBEITEN : Ich verwende Chrome 10 zum Testen. Bitte machen Sie das gleiche
javascript
html
forms
validation
Skizit
quelle
quelle
Antworten:
Verwendung
setCustomValidity
:Ich habe von Mootools zu Vanille-JavaScript gewechselt, wie von @itpastorn in den Kommentaren vorgeschlagen, aber Sie sollten in der Lage sein, das Mootools-Äquivalent zu ermitteln, falls erforderlich.
Bearbeiten
Ich habe den Code hier aktualisiert, da er
setCustomValidity
etwas anders funktioniert als bei meiner ursprünglichen Antwort. WennsetCustomValidity
etwas anderes als die leere Zeichenfolge festgelegt ist, wird das Feld als ungültig betrachtet. Daher müssen Sie es löschen, bevor Sie die Gültigkeit testen. Sie können es nicht einfach einstellen und vergessen.Weiter bearbeiten
Wie im Kommentar von @ thomasvdb unten ausgeführt, müssen Sie die benutzerdefinierte Gültigkeit in einigen Fällen löschen, da
invalid
sonst möglicherweise ein zusätzlicher Durchgang durch denoninvalid
Handler erforderlich ist , um sie zu löschen.quelle
input
Ereignis festzulegen . Im Moment wird es nur gelöscht, wenn dasinvalid
Ereignis ausgelöst wird.$("")
Gibt ein Array von Objekten zurück, auch wenn es nur eines gibt.$("")[i]
ist höchstwahrscheinlich das, was Sie wollen.Hier ist der Code für die Behandlung von benutzerdefinierten Fehlermeldungen in HTML5
Dieser Teil ist wichtig, da er die Fehlermeldung verbirgt, wenn der Benutzer neue Daten eingibt:
quelle
Es ist sehr einfach, benutzerdefinierte Nachrichten mithilfe von
HTML5
Ereignissen zu steuernoninvalid
Hier ist Code:
Das ist am wichtigsten:
quelle
onchange="this.setCustomValidity('')"
des Fehlers wird verschwunden sein. Überprüfen Sie meine Antwort unten.oninput
stattdessen anstelle vononvalid
.oninput
ist die universellere Lösung,onvalid
hat auch in Chrome für mich nicht funktioniert.Hinweis: Dies funktioniert nicht mehr in Chrome und wird nicht in anderen Browsern getestet. Siehe Änderungen unten. Diese Antwort wird hier als historische Referenz hinterlassen.
Wenn Sie der Meinung sind, dass die Validierungszeichenfolge wirklich nicht durch Code festgelegt werden sollte, können Sie das title-Attribut Ihres Eingabeelements so einstellen, dass "Dieses Feld darf nicht leer gelassen werden". (Funktioniert in Chrome 10)
Siehe http://jsfiddle.net/kaleb/nfgfP/8/
In Firefox können Sie dieses Attribut hinzufügen:
Bearbeiten
Dies scheint sich geändert zu haben, seit ich diese Antwort ursprünglich geschrieben habe. Durch das Hinzufügen eines Titels wird die Gültigkeitsnachricht nicht geändert, sondern lediglich ein Nachtrag zur Nachricht hinzugefügt. Die obige Geige gilt immer noch.
Bearbeiten 2
Chrome macht ab Chrome 51 jetzt nichts mehr mit dem title-Attribut. Ich bin mir nicht sicher, in welcher Version sich dies geändert hat.
quelle
x-moz-errormessage="This field should not be left blank."
Es ist sehr einfach, benutzerdefinierte Nachrichten mithilfe des
HTML5
oninvalid
Ereignisses zu steuernHier ist der Code:
quelle
Durch Einstellen und Deaktivieren zum
setCustomValidity
richtigen Zeitpunkt funktioniert die Validierungsnachricht einwandfrei.Ich habe
onchange
stattdessen verwendet,oninput
was allgemeiner ist und auftritt, wenn der Wert unter beliebigen Bedingungen auch über JavaScript geändert wird.quelle
onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.e
Kann null sein, z. B. wenn eine Option aus einem React Select-Feld entfernt wird. Vergessen Sie nicht, das zu überprüfen.onChange
onInvalid
inputProps={{ onInvalid: …, onChange: …, }}
type='email'
ist etwas schwieriger zu behandeln, dasetCustomValidity
Sets verwendet werdencustomError: true
,e.target.validity
auch wenn die Eingabe gültig ist. Ich versuche einen Weg zu finden, um das Problem zu beheben.Ich habe eine kleine Bibliothek erstellt, um das Ändern und Übersetzen der Fehlermeldungen zu vereinfachen. Sie können die Texte sogar nach Fehlertyp ändern, der derzeit
title
in Chrome oderx-moz-errormessage
Firefox nicht verfügbar ist . Probieren Sie es auf GitHub aus und geben Sie Feedback.Es wird verwendet wie:
Bei jsFiddle ist eine Demo verfügbar .
quelle
Probieren Sie dieses aus, es ist besser und getestet:
HTML:
JAVASCRIPT:
Demo:
http://jsfiddle.net/patelriki13/Sqq8e/
quelle
Der einfachste und sauberste Weg, den ich gefunden habe, besteht darin, ein Datenattribut zum Speichern Ihres benutzerdefinierten Fehlers zu verwenden. Testen Sie den Knoten auf Gültigkeit und behandeln Sie den Fehler mithilfe eines benutzerdefinierten HTML-Codes.
le Javascript
und etwas super HTML5
quelle
A-z
erlaubt '[', '\', ']', '^', '_' und '`'.Die Lösung zur Vermeidung von Google Chrome-Fehlermeldungen bei der Eingabe jedes Symbols:
quelle
Ich habe eine einfachere Vanille js einzige Lösung:
Für Kontrollkästchen:
Für Eingaben:
quelle
Als ich die Antwort von Salar an JSX und React anpasste, bemerkte ich, dass sich React Select nicht wie ein
<input/>
Feld für die Validierung verhält . Anscheinend sind mehrere Problemumgehungen erforderlich, um nur die benutzerdefinierte Nachricht anzuzeigen und zu verhindern, dass sie zu ungünstigen Zeiten angezeigt wird.Ich habe hier ein Problem angesprochen , wenn es etwas hilft. Hier ist eine CodeSandbox mit einem funktionierenden Beispiel, und der wichtigste Code dort wird hier wiedergegeben:
quelle
Okay, oninvalid funktioniert gut, aber es zeigt Fehler an, selbst wenn der Benutzer gültige Daten eingegeben hat. Also habe ich unten verwendet, um es anzugehen, hoffe, dass es auch für Sie funktioniert,
oninvalid="this.setCustomValidity('Your custom message.')"
onkeyup="setCustomValidity('')"
quelle
Kann einfach gehandhabt werden, indem einfach 'title' in das Feld eingefügt wird:
quelle