HTML5-Formular-Attribut. Legen Sie die benutzerdefinierte Validierung Nachricht?
Habe ich das folgende HTML5-form: http://jsfiddle.net/nfgfP/
HTML:
<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"/>
Derzeit, wenn ich drücken Sie die EINGABETASTE, wenn Sie sind beide leer, wird ein popup-Dialogfeld angezeigt wird sagen: "Bitte füllen Sie dieses Feld aus". Wie würde ich es ändern, dass die Standard-Meldung "Dieses Feld kann nicht leer gelassen werden"?
EDIT: beachten Sie Auch, dass die Art Passwort-Feld die Fehlermeldung ist einfach *****
. Um dies zu erschaffen der Benutzername einem Wert aus und klicken vorzulegen.
BEARBEITEN: ich bin mit Chrome 10 zum testen. Bitte das gleiche tun
- Ach ja, +1 für die wahnsinnig leer-password validation-message =/ Wie konnte das passieren QA, Frage ich mich...
- Warum nicht einfach akzeptieren die browser-Standard-Nachricht? Das ist, was Benutzer sehen, für jede andere Website, die Sie besuchen, Sie müssen nur verwirren Sie Ihre Nutzer durch die Schaffung eines nicht-standard-Nachricht. (Google hat wohl gelungen mehr UX-evaluation & - Prüfung bei der Bestimmung, dass der Wortlaut, als Sie haben!).
- Was ist mit mehrsprachigen Websites?
- In meinem Fall möchte ich, um zu überprüfen, dass der Wert eine Zahl ist vor dem posting, aber ich kann nicht mit type="number" - Attribut (aus Gründen.) Also setze ich das Attribut "pattern", um zahlen überprüfen und optional decimals gibt die Meldung, "Bitte mit der geforderten format" auf Fehler. Ich würde eher sagen: "müßt Ihr Geschenk uns eine Reihe bucko."
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
setCustomValidity
:Ich geändert Vanille JavaScript von Mootools, wie vorgeschlagen, durch @itpastorn in den Kommentaren, aber Sie sollten in der Lage sein, zu arbeiten, die Mootools gleichwertig, wenn nötig.
Bearbeiten
Habe ich aktualisiert, der code hier als
setCustomValidity
funktioniert etwas anders als das, was ich Verstand, als ich ursprünglich antwortete. WennsetCustomValidity
festgelegt ist etwas anderes als die leere Zeichenkette, wird dazu führen, dass das Feld als ungültig betrachtet werden; daher müssen Sie löschen Sie es, bevor die Prüfung der Gültigkeit können Sie nicht nur einstellen und vergessen.Weiter Bearbeiten
Wie schon in @thomasvdb Kommentar unten, müssen Sie deaktivieren Sie die benutzerdefinierte Gültigkeit in einem Ereignis außerhalb der
invalid
sonst kann es eine zusätzliche pass durch dieoninvalid
- handler, um es zu deaktivieren.input
Veranstaltung. Im moment sind es nur immer gelöscht, wenn Sie dieinvalid
event gefeuert wird.$("")
gibt ein array von Objekten, auch wenn es nur eine.$("")[i]
ist wahrscheinlich das, was Sie wollen.oninvalid
- Attribut auch für "Puristen" ist völlig sinnlos.<input data-oninvalid="hey" required>
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(""); var dataAttr = e.target.getAttribute('data-oninvalid') if (!e.target.validity.valid && dataAttr) { e.target.setCustomValidity(dataAttr); } }; elements[i].oninput = function(e) { e.target.setCustomValidity(""); }; } })
Hier ist der code für die Benutzerdefinierte Fehlermeldung in HTML5
Dieser Teil ist wichtig, weil es blendet die Fehlermeldung, wenn der Benutzer Eingaben neuer Daten:
Es ist sehr einfach zu Steuern, benutzerdefinierte Nachrichten mit Hilfe von
HTML5
Veranstaltungoninvalid
Hier ist der code:
Dies ist der wichtigste:
onchange="this.setCustomValidity('')"
der Fehler wird verschwunden sein. Überprüfen Sie meine Antwort unten.oninput
stattonvalid
.oninput
ist die universellere Lösung,onvalid
hat nicht funktioniert, auch in Chrome für mich.Hinweis: Dies nicht mehr funktioniert in Chrome, nicht getestet, in anderen Browsern. Siehe änderungen unten. Diese Antwort wird hier Links für historische Referenz.
Wenn Sie das Gefühl, dass die Validierung string sollte wirklich nicht über code festgelegt werden, Sie können Sie input-element das title-Attribut zu Lesen "Dieses Feld kann nicht leer gelassen werden". (Funktioniert in Chrome 10)
Sehen http://jsfiddle.net/kaleb/nfgfP/8/
Und in Firefox, können Sie dieses Attribut hinzufügen:
Bearbeiten
Dieser scheint sich verändert zu haben, da ursprünglich schrieb ich diese Antwort. Jetzt hinzufügen ein Titel nicht ändern die Gültigkeit der Nachricht, es fügt nur ein Nachtrag zu der Nachricht. Die Geige oben noch gilt.
Edit 2
Chrome macht jetzt nichts mit dem title-Attribut, wie von Chrom 51. Ich bin mir nicht sicher in welcher version das geändert.
x-moz-errormessage="This field should not be left blank."
Habe ich eine kleine Bibliothek zu erleichtern, verändern und übersetzen die Fehlermeldungen. Sie können sogar ändern Sie die Texte von Fehler-Art, die derzeit nicht verfügbar
title
in Chrom oderx-moz-errormessage
im Firefox. Gehen check it out auf GitHub, und feedback geben.Es ist wie:
Gibt es eine die demo auf jsFiddle.
Durch setzen und entfernen der
setCustomValidity
in der richtigen Zeit, die Validierungs-Nachricht wird einwandfrei funktionieren.Ich verwendet
onchange
stattoninput
das ist mehr allgemein und tritt auf, wenn der Wert geändert wird, in jedem Zustand, auch mit Hilfe von JavaScript.onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }}
.e
kann null sein, zum Beispiel, wenn eine option entfernt wird, ein Reagieren, Wählen Sie Feld. Vergessen Sie nicht, zu überprüfen, dass.onChange
undonInvalid
alsinputProps={{ onInvalid: …, onChange: …, }}
type='email'
ist ein bisschen schwieriger zu behandeln, da mitsetCustomValidity
setztcustomError: true
zue.target.validity
auch wenn die Eingabe gültig ist. Ich bin versucht, einen Weg finden, es zu beheben.Es ist sehr einfach zu Steuern, benutzerdefinierte Nachrichten mit Hilfe der
HTML5
oninvalid
VeranstaltungHier ist der code:
Versuchen Sie, diese eine, seine bessere und getestet:
HTML:
JAVASCRIPT:
Demo:
http://jsfiddle.net/patelriki13/Sqq8e/
Der einfachste und sauberste Weg, die ich gefunden habe, ist ein data-Attribut speichern Sie Ihre benutzerdefinierten Fehler. Testen Sie den Knoten für die Gültigkeit und den Fehler behandeln, indem Sie einige benutzerdefinierte html.
le javascript
- und einige HTML5-super
A-z
erlaubt '[', '\', ']', '^', '_', und "'.Habe ich eine einfachere vanilla js einzige Lösung:
Für Checkboxen:
Für Eingänge:
Okay, oninvalid gut funktioniert, aber es zeigt Fehler, auch wenn Benutzer eingegebenen Daten gültig sind. Also ich habe unten anzugehen es, hoffe, es wird für Sie arbeiten,
oninvalid="this.setCustomValidity('Your custom message.')"
onkeyup="setCustomValidity('')"
Die Lösung für die Verhinderung Google Chrome Fehlermeldungen am Eingang jedes symbol:
HTML:
Anpassung Salar's Antwort auf JSX und Reagieren, bemerkte ich, dass Reagieren, Wählen Sie benimmt sich nicht nur wie ein
<input/>
Feld zur überprüfung. Anscheinend mehrere workarounds nötig sind, um nur die benutzerdefinierten Nachricht und halten Sie es von der Anzeige zu ungünstigen Zeiten.Habe ich ein Problem angesprochen hier, wenn es hilft nichts. Hier ist ein CodeSandbox mit einem Beispiel arbeiten, und das wichtigste-code gibt es hier wiedergegeben:
Leicht gehandhabt werden können, indem nur darum, 'title' mit dem Feld: