So erzwingen Sie die Validierung eines HTML-Formulars, ohne es über jQuery zu senden
Lesezeit: 7 Minuten
razenha
Ich habe dieses Formular in meiner App und werde es über AJAX übermitteln, aber ich möchte HTML für die clientseitige Validierung verwenden. Also möchte ich in der Lage sein, die Formularvalidierung zu erzwingen, vielleicht über jQuery.
Ich möchte die Validierung auslösen, ohne das Formular abzusenden. Ist es möglich?
Können Sie angeben, an welcher Stelle Sie das Formular validieren möchten? Was löst die Validierung aus? Möchten Sie jedes Feld validieren, wenn der Benutzer das Feld eingibt, betritt/verlässt oder den Wert ändert?
– Peter Pajchl
8. August 2012 um 21:12 Uhr
Ich würde gerne so etwas tun können: $(“#my_form”).triggerHtml5Validation()
Wenn Sie die nativen Fehlermeldungen einiger Browser (z. B. Chrome) anzeigen möchten, können Sie dies leider nur tun, indem Sie das Formular wie folgt senden:
var $myForm = $('#myForm');
if (!$myForm[0].checkValidity()) {
// If the form is invalid, submit it. The form won't actually submit;
// this will just cause the browser to display the native HTML5 error messages.
$myForm.find(':submit').click();
}
Beachten Sie, dass die HTML5-Validierung noch nicht in allen Browsern unterstützt wird.
Versuchen Sie zu ersetzen $myForm.submit() mit $myForm.find(':submit').click()
– Abraham
1. Dezember 2012 um 17:18 Uhr
Abraham hat Recht. Sie müssen tatsächlich auf die Schaltfläche „Senden“ klicken (programmgesteuert). Der Aufruf von $myForm.submit() löst die Validierung nicht aus.
– Kevin Tighe
27. März 2013 um 18:06 Uhr
Wenn Ihr Formular keinen Senden-Button hat, können Sie einen vortäuschen: $('<input type="submit">').hide().appendTo($myForm).click().remove();
– Philfreo
7. November 2014 um 22:14 Uhr
Diese Antwort ist wegen des Hinweises sehr nützlich checkValidity()aber es hat auch einen gefährlichen Fehler. checkValidity() ist es, was native Browser-Fehlermeldungen auslöst, nicht das Klicken auf die Schaltfläche „Senden“. Wenn Sie einen Ereignis-Listener haben, der auf das Klicken auf die Senden-Schaltfläche hört, lösen Sie ihn aus, wenn Sie ` $myForm.find(‘:submit’).click()` ausführen, was sich selbst auslöst und eine unendliche Rekursion verursacht.
– Ungültige Anforderung
28. Januar 2015 um 18:02 Uhr
Verwenden Sie .reportValidity (); Fehlermeldungen des nativen Browsers anzuzeigen, ohne das Formular abzusenden
– Marco Marsala
15. April 2020 um 18:38 Uhr
Boopathie.Indotnet
Der folgende Code funktioniert bei mir,
$("#btn").click(function () {
if ($("#frm")[0].checkValidity())
alert('sucess');
else
//Validate Form
$("#frm")[0].reportValidity()
});
reportValidity() ist die beste Funktion zum Hervorheben von Pflichtfeldern.
Warum nicht einfach .reportValidity()? Es wird auch die Gültigkeit prüfen und wahr/falsch zurückgeben.
– Przemyslaw Niemiec
28. Dezember 2020 um 12:33 Uhr
Martin Christensen
Ich habe festgestellt, dass diese Lösung für mich funktioniert. Rufen Sie einfach eine Javascript-Funktion wie folgt auf:
action="javascript:myFunction();"
Dann haben Sie die HTML5-Validierung … ganz einfach 🙂
Das hat auch bei mir funktioniert und ich denke, das ist die beste Antwort. ich setze action="javascript:0" auf der <form> und gebunden click Veranstaltung auf der <button> Zu MyFunction() und alles hat super geklappt. Ich halte alle JS aus HTML heraus. MyFunction kann dann testen form.checkValidity() weitermachen.
– orad
16. Oktober 2013 um 19:20 Uhr
Beispielcode ist immer hilfreich.
– BJ Patel
19. März 2016 um 17:35 Uhr
Bindung an das Formular onsubmit() ist fast immer besser als an einen Knopf zu binden onclick(), da es andere Möglichkeiten gibt, ein Formular einzureichen. (Insbesondere durch Drücken der return Taste.)
– alttag
11. April 2016 um 17:59 Uhr
+1 Das ist erstaunlich. keine Javascript-Methodenvalidierung mehr, wenn das Feld leer ist oder es sich um eine E-Mail handelt. Der Browser kann das für uns erledigen! Ist dieser Cross-Browser-kompatibel?
– Jo E.
15. Juni 2016 um 9:42 Uhr
Weder action="javascript:myFunction();" oder action="javascript:0" funktioniert nicht mehr im neuesten Firefox (67). Funktioniert aber auf Chrome.
Hier ist ein allgemeinerer Weg, der etwas sauberer ist:
Erstellen Sie Ihr Formular wie folgt (kann ein Dummy-Formular sein, das nichts tut):
<form class="validateDontSubmit">
...
Binden Sie alle Formulare, die Sie nicht wirklich senden möchten:
$(document).on('submit','.validateDontSubmit',function (e) {
//prevent the form from doing a submit
e.preventDefault();
return false;
})
Sagen wir jetzt, Sie haben eine <a> (innerhalb der <form>), dass Sie beim Klicken das Formular validieren möchten:
$('#myLink').click(function(e){
//Leverage the HTML5 validation w/ ajax. Have to submit to get em. Wont actually submit cuz form
//has .validateDontSubmit class
var $theForm = $(this).closest('form');
//Some browsers don't implement checkValidity
if (( typeof($theForm[0].checkValidity) == "function" ) && !$theForm[0].checkValidity()) {
return;
}
//if you've gotten here - play on playa'
});
Einige Anmerkungen hier:
Mir ist aufgefallen, dass Sie das Formular nicht tatsächlich absenden müssen, damit die Validierung erfolgt – der Aufruf an checkValidity() reicht (zumindest in Chrom). Wenn andere Kommentare hinzufügen könnten, um diese Theorie auf anderen Browsern zu testen, werde ich diese Antwort aktualisieren.
Das Ding, das die Validierung auslöst, muss sich nicht innerhalb von befinden <form>. Dies war nur eine saubere und flexible Möglichkeit, eine Allzwecklösung zu haben.
2022 Vanilla JS-Lösung
Reines JavaScript hat alle Funktionen, die Sie dafür brauchen. Ich weiß, dass es bei der Frage um jQuery ging, aber selbst die Antworten mit jQuery verwenden diese Funktionen, die es sind checkValidity() Und reportValidity().
Testen Sie das gesamte Formular
let form = document.getElementById('formId');
// Eventlistener can be another event and on another DOM object this is just an example
form.addEventListener('submit', function (event) {
// Only needed if event is submit, otherwise this line can be skipped
event.preventDefault();
// This is the important part, test if form is valid
if (form.checkValidity() === false){
// This is the magic function that displays the validation errors to the user
form.reportValidity();
return;
}
// Code if all fields are valid; continue form submit or make Ajax call.
})
Testen Sie ein bestimmtes Feld
checkValidity() Und reportValidity() kann nicht nur auf dem Formular, sondern auch auf bestimmten Feldern verwendet werden. Es ist nicht erforderlich, ein Formular oder eine Dummy-Schaltfläche zum Senden zu erstellen, wenn dies nicht erforderlich ist.
// Get field of interest
let inputElement = document.querySelector("[name="" + inputName + ""]");
// Check if the element is valid
if (inputElement.checkValidity() === false){
// If not, show the errors to the user
inputElement.reportValidity();
return;
}
// Nothing? Great, continue to the Ajax call or whatever
Dies muss natürlich in einer Funktion sein, die von einem Ereignis-Listener aufgerufen wird, um Sinn zu machen.
vzr
Kann zu spät zur Party kommen, aber irgendwie habe ich diese Frage gefunden, als ich versuchte, ein ähnliches Problem zu lösen. Da kein Code von dieser Seite für mich funktionierte, habe ich inzwischen eine Lösung gefunden, die wie angegeben funktioniert.
Problem ist, wenn Ihr <form> DOM enthält Single <button> Element, einmal abgefeuert, das <button> wird automatisch Formular senden. Wenn Sie mit AJAX spielen, müssen Sie wahrscheinlich die Standardaktion verhindern. Aber es gibt einen Haken: Wenn Sie dies einfach tun, verhindern Sie auch die grundlegende HTML5-Validierung. Daher ist es sinnvoll, Standardeinstellungen für diese Schaltfläche nur dann zu verhindern, wenn das Formular gültig ist. Andernfalls schützt Sie die HTML5-Validierung vor dem Absenden. jQuery checkValidity() wird dabei helfen:
jQuery:
$(document).ready(function() {
$('#buttonID').on('click', function(event) {
var isvalidate = $("#formID")[0].checkValidity();
if (isvalidate) {
event.preventDefault();
// HERE YOU CAN PUT YOUR AJAX CALL
}
});
});
Der oben beschriebene Code ermöglicht es Ihnen, die grundlegende HTML5-Validierung (mit Typ- und Musterabgleich) zu verwenden, OHNE das Formular zu übermitteln.
14432100cookie-checkSo erzwingen Sie die Validierung eines HTML-Formulars, ohne es über jQuery zu sendenyes
Können Sie angeben, an welcher Stelle Sie das Formular validieren möchten? Was löst die Validierung aus? Möchten Sie jedes Feld validieren, wenn der Benutzer das Feld eingibt, betritt/verlässt oder den Wert ändert?
– Peter Pajchl
8. August 2012 um 21:12 Uhr
Ich würde gerne so etwas tun können: $(“#my_form”).triggerHtml5Validation()
– Razenha
8. August 2012 um 21:29 Uhr
Diese Seite könnte helfen Verknüpfung
– Dan Bray
19. März 2016 um 16:24 Uhr