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?

49voto

Salar Punkte 2048

Durch das Setzen und Lösen der setCustomValidity zur richtigen Zeit, wird die Validierungsmeldung einwandfrei funktionieren.

<input name="Username" required 
oninvalid="this.setCustomValidity('Username cannot be empty.')" 
onchange="this.setCustomValidity('')" type="text" />

Ich habe onchange anstelle von oninput die allgemeiner ist und auftritt, wenn der Wert in einer beliebigen Bedingung geändert wird, auch durch JavaScript.

0 Stimmen

Dies sollte die akzeptierte Antwort sein. Funktioniert in Windows 10 1709 in den folgenden Browsern: Chrome 66.0.3359.139 64 Bit, Firefox 59.0.3 (64 Bit), Internet Explorer 11.431.16299.0, Edge 41.16299.402.0. Funktioniert unter macOS 10.13.2 in Safari 11.0 (13604.1.38.1.6). Funktioniert unter Android 4.4.4 in Chrome 66.0.3359.158. Für diejenigen, die nach dem JSX-Weg suchen: onInvalid={(e) => { e.target.setCustomValidity('foo') }} onChange={(e) => { e.target.setCustomValidity('') }} .

0 Stimmen

Nachtrag: e kann null sein, zum Beispiel wenn eine Option aus einem React Select-Feld entfernt wird. Vergessen Sie nicht, dies zu überprüfen.

0 Stimmen

Errata: um dies mit React Select zu verwenden, müssen Sie übergeben onChange y onInvalid como inputProps={{ onInvalid: …, onChange: …, }}

43voto

hleinone Punkte 4460

Ich habe eine kleine Bibliothek erstellt, um das Ändern und Übersetzen der Fehlermeldungen zu erleichtern. Sie können sogar die Texte nach Fehlertyp ändern, was derzeit nicht möglich ist, indem Sie title in Chrome oder x-moz-errormessage in Firefox. Weiter Ausprobieren auf GitHub und geben Sie Feedback.

Es wird verwendet wie:

<input type="email" required data-errormessage-value-missing="Please input something">

Es gibt eine Demo verfügbar bei jsFiddle .

0 Stimmen

Danke! Mein kleiner Fehler, der als Kommentar in der akzeptierten Antwort erwähnt wurde, ist behoben.

0 Stimmen

Gute Antwort, da der OP Google Chrome benutzt; allerdings funktioniert das nicht im IE Edge

37voto

Rikin Patel Punkte 8408

Versuchen Sie es hiermit, es ist besser und getestet:

HTML:

<form id="myform">
    <input id="email" 
           oninvalid="InvalidMsg(this);" 
           oninput="InvalidMsg(this);"
           name="email"  
           type="email" 
           required="required" />
    <input type="submit" />
</form>

JAVASCRIPT:

function InvalidMsg(textbox) {
    if (textbox.value === '') {
        textbox.setCustomValidity('Required email address');
    } else if (textbox.validity.typeMismatch){
        textbox.setCustomValidity('please enter a valid email address');
    } else {
       textbox.setCustomValidity('');
    }

    return true;
}

Demo:

http://jsfiddle.net/patelriki13/Sqq8e/

0 Stimmen

Hey....eine gute Lösung, aber type=email funktioniert nicht im Safari-Browser. schauen Sie mal w3schools.com/html/html_form_input_types.asp

2 Stimmen

Ja, es ist nicht für Safari unterstützt, aber ich gab eine Antwort für benutzerdefinierte Validierung Nachricht setzen.

15voto

Collin White Punkte 580

Der einfachste und sauberste Weg, den ich gefunden habe, ist die Verwendung eines Datenattributs, um Ihren benutzerdefinierten Fehler zu speichern. Testen Sie den Knoten auf Gültigkeit und behandeln Sie den Fehler mit einer benutzerdefinierten HTML. enter image description here

le javascript

if(node.validity.patternMismatch)
        {
            message = node.dataset.patternError;
        }

und einige super HTML5

<input type="text" id="city" name="city" data-pattern-error="Please use only letters for your city." pattern="[A-z ']*" required>

4 Stimmen

Trotz des Fehlers, der besagt, dass nur Buchstaben erlaubt sind, erlaubt das Muster Leerzeichen und Apostrophe? Auch, A-z erlaubt '[', '\', ']', '^', '_', und '`'.

9voto

Andrei Veshtard Punkte 489

Die Lösung zur Vermeidung von Google Chrome Fehlermeldungen bei der Eingabe jedes Symbols:

<p>Click the 'Submit' button with empty input field and you will see the custom error message. Then put "-" sign in the same input field.</p>
<form method="post" action="#">
  <label for="text_number_1">Here you will see browser's error validation message on input:</label><br>
  <input id="test_number_1" type="number" min="0" required="true"
         oninput="this.setCustomValidity('')"
         oninvalid="this.setCustomValidity('This is my custom message.')"/>
  <input type="submit"/>
</form>

<form method="post" action="#">
  <p></p>
  <label for="text_number_1">Here you will see no error messages on input:</label><br>
  <input id="test_number_2" type="number" min="0" required="true"
         oninput="(function(e){e.setCustomValidity(''); return !e.validity.valid && e.setCustomValidity(' ')})(this)"
         oninvalid="this.setCustomValidity('This is my custom message.')"/>
  <input type="submit"/>
</form>

0 Stimmen

Auf den ersten Blick dachte ich, ich wüsste, warum das funktioniert, aber ich kann es nicht herausfinden. Kann mir das jemand erklären? (Wie ändert das IIFE dies?)

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