Ich habe ein Formular mit verschiedenen Feldsätzen. Ich habe etwas Javascript, das den Benutzern die Feldsätze einzeln anzeigt. Für Browser, die die HTML5-Validierung unterstützen, würde ich sie gerne nutzen. Ich muss es jedoch zu meinen Bedingungen tun. Ich benutze JQuery.
Wenn ein Benutzer auf einen JS-Link klickt, um zum nächsten Feldsatz zu wechseln, muss die Validierung für den aktuellen Feldsatz erfolgen und den Benutzer daran hindern, bei Problemen vorwärts zu gehen.
Wenn der Benutzer den Fokus auf ein Element verliert, erfolgt im Idealfall eine Validierung.
Derzeit muss Novalidate Javascript verwenden. Würde lieber die native Methode verwenden. :) :)
quelle
$('<input type="submit">').hide().appendTo($myForm).click().remove();
form.submit()
Arbeit nicht gut funktionieren? Oder benötigt HTML5 jetzt eine Senden-Schaltfläche für die Validierung?.submit()
funktioniert bei mir nicht. @ philfreos Lösung funktioniert. Hmm.TL; DR: Sie interessieren sich nicht für alte Browser? Verwenden Sie
form.reportValidity()
.Benötigen Sie Unterstützung für ältere Browser? Weiter lesen.
Es tatsächlich ist möglich Trigger Validierung von Hand.
Ich werde in meiner Antwort einfaches JavaScript verwenden, um die Wiederverwendbarkeit zu verbessern. Es wird keine jQuery benötigt.
Nehmen Sie das folgende HTML-Formular an:
Und lassen Sie uns unsere UI-Elemente in JavaScript greifen:
Benötigen Sie keine Unterstützung für ältere Browser wie Internet Explorer? Das ist für dich.
Alle modernen Browser unterstützen die
reportValidity()
Methode fürform
Elemente.Das war's, wir sind fertig. Auch hier ist ein einfaches CodePen mit diesem Ansatz.
Ansatz für ältere Browser
Wo dies
reportValidity()
nicht unterstützt wird, müssen wir den Browser ein wenig austricksen. Was machen wir jetzt?form.checkValidity()
. Dies teilt uns mit, ob das Formular gültig ist, zeigt jedoch nicht die Validierungs-Benutzeroberfläche an.In Code:
Dieser Code funktioniert in so ziemlich jedem gängigen Browser (ich habe ihn erfolgreich bis auf IE11 getestet).
Hier ist ein funktionierendes CodePen-Beispiel.
quelle
In gewissem Maße können Sie
trigger
HTML5-Formularüberprüfung durchführen und dem Benutzer Hinweise anzeigen, ohne das Formular zu senden!Zwei Schaltflächen, eine zum Überprüfen und eine zum Senden
Setzen Sie einen
onclick
Listener auf die Schaltfläche "Validieren", um ein globales Flag (z. B.justValidate
) zu setzen, das angibt, dass dieser Klick die Validierung des Formulars überprüfen soll.Setzen Sie einen
onclick
Listener auf die Senden-Schaltfläche, um dasjustValidate
Flag auf false zu setzen.Anschließend
onsubmit
überprüfen Sie im Handler des Formulars das FlagjustValidate
, um den Rückgabewert zu bestimmen, und rufen daspreventDefault()
auf, um das zu sendende Formular zu stoppen. Wie Sie wissen, wird die HTML5-Formularüberprüfung (und der GUI-Hinweis für den Benutzer) vor demonsubmit
Ereignis durchgeführt. Selbst wenn das Formular GÜLTIG ist, können Sie das Senden des Formulars stoppen, indem Sie false zurückgeben oder aufrufenpreventDefault()
.In HTML5 haben Sie eine Methode, um die Validierung des Formulars zu überprüfen: die
form.checkValidity()
, dann können Sie in wissen, ob das Formular in Ihrem Code validiert ist oder nicht.OK, hier ist die Demo: http://jsbin.com/buvuku/2/edit
quelle
Ich bin mir nicht sicher, ob es sich für mich lohnt, dies alles von Grund auf neu zu schreiben, da dieser in A List Apart veröffentlichte Artikel es ziemlich gut erklärt. MDN bietet auch eine praktische Anleitung für HTML5-Formulare und -Validierung (einschließlich der API und des zugehörigen CSS).
quelle
Das Hinzufügen oder Entfernen von HTML5-Validierung zu Feldsätzen ist etwas einfach.
quelle
Ich scheine den Trick zu finden: Entfernen Sie einfach das Formularattribut
target
, überprüfen Sie das Formular mit einer Schaltfläche zum Senden und zeigen Sie Hinweise an, prüfen Sie, ob das Formular über JavaScript gültig ist, und veröffentlichen Sie dann alles. Der folgende Code funktioniert für mich:quelle
HTML Quelltext:
Javascript (mit Jquery):
Hoffe das wird dir helfen
quelle
quelle
Wenn es einen sehr komplexen (insbesondere asynchronen) Validierungsprozess gibt, gibt es eine einfache Problemumgehung:
quelle
Ein anderer Weg, um dieses Problem zu lösen:
quelle
Uncaught TypeError: $(...).oninvalid is not a function
verstehe ich: und ich sehe es nicht in den jQuery-Dokumenten.