Wie kann ich eine Formularaktion ungültig machen und jQuery ausführen, wenn alle HTML-Formularelemente validiert sind?
Lesezeit: 4 Minuten
Rees
Ich habe ein einfaches HTML-Formular, das ich für die erforderliche Feldvalidierung nutzen möchte. Mein Problem ist, dass ich die HTML5-Formularvalidierung verwenden möchte, ABER gleichzeitig das eigentliche Absenden des Formulars vermeiden möchte, da ich stattdessen einen jQuery Ajax-Aufruf ausführen möchte. Ich weiß, dass Sie die HTML5-Validierung deaktivieren können, aber ich möchte dies als meine primäre Methode der Formularvalidierung anstelle eines jQuery-Plugins beibehalten.
Dementsprechend: Unterstützen noch irgendwelche Browser die checkValidity()-Methode von HTML5?, und dies ist möglicherweise nicht die neueste Wahrheit, da HTML5 noch in Arbeit ist, die Form.checkValidity() Und element.validity.valid sollte Ihnen den Zugriff auf Validierungsinformationen von JavaScript ermöglichen. Angenommen, das stimmt, müsste sich Ihre jQuery an das Absenden des Formulars anhängen und davon Gebrauch machen:
$('#membershipform').submit(function(event){
// cancels the form submission
event.preventDefault();
// do whatever you want here
});
An alle Leser: Stellen Sie sicher, dass Sie den Ereignisparameter in die Funktion aufnehmen, da dies sonst in Firefox NICHT funktioniert.
– Marcel Gruber
26. März 2015 um 21:42 Uhr
@Max, meinst du damit sicherzugehen, dass du das bestehst? event Parameter für die Callback-Funktion? Wenn ja, ja, das ist sicherlich in allen Browsern erforderlich, da Sie nicht anrufen konnten preventDefault ansonsten.
– Milimetrisch
26. März 2015 um 22:05 Uhr
Ja. Nur als Erinnerung. Ich habe viel Zeit damit verschwendet, herauszufinden, warum es nicht funktionierte, nachdem ich nur das benutzt hatte event.preventDefault(); und nicht der Rest des Beispiels. Auch ohne die event Parameter, schien es sich in Chrome immer noch wie gewünscht zu verhalten, aber nicht in Firefox.
– Marcel Gruber
26. März 2015 um 22:14 Uhr
@Max – was Sie dort haben könnten, ist, dass Chrome automatisch ein automatisches Validierungsverhalten hat, das auch das Absenden des Formulars verhindert. Also dieser Code wäre gar nicht nötig, aber event.preventDefault() würde einen Fehler auf der Konsole ausgeben, wenn Sie es ohne verwenden würden event definiert werden. Stellen Sie also sicher, dass diese Konsole geöffnet bleibt. Bleibt sicher da draußen! 🙂
– Milimetrisch
27. März 2015 um 12:11 Uhr
Sie können die HTML5-Formularvalidierung von Javascript verwenden, nur die Methode aufrufen reportValidity()
reportValidity führt die HTML5-Formularvalidierung aus und gibt wahr/falsch zurück.
Verwenden:
$('#membershipform').submit(function(){
// do whatever you want here
return false;
});
Dies funktioniert nicht, wenn der Code über der return-Anweisung einen Fehler ausgibt. Im Fehlerfall geht das Formular trotzdem an die im Attribut “action” angegebene Adresse.
– Stan
11. Januar 2013 um 0:28 Uhr
Ja! Dies funktioniert, wenn ich möchte, dass mein Formular den Validierungsteil durchläuft, aber nicht absendet. Gut gemacht
– Sando K
9. Januar 2016 um 18:00 Uhr
Dies ist eine subtile Hebelwirkung von Standardverhalten und Javascript, um das zu erstellen, was Sie möchten.
var form = document.getElementById("purchaseForm");
if(form.checkValidity()){
console.log("valid");
e.preventDefault();
}else{
console.log("not valid");
return;
}
Wenn das Formular gültig ist, dann preventDefault() und mit Ihrer Funktion fortfahren (z. B. über Ajax senden). Wenn nicht gültig, kehren Sie zurück, ohne den Standard zu verhindern. Sie sollten feststellen, dass die Standardaktionen für die Formularvalidierung bei Ihren Formulareingaben auftreten.