So erzwingen Sie die Validierung eines HTML-Formulars, ohne es über jQuery zu senden

Lesezeit: 7 Minuten

Benutzeravatar von razenha
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()

    – 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

Abrahams Benutzer-Avatar
Abraham

Um zu prüfen, ob ein bestimmtes Feld gültig ist, verwenden Sie:

$('#myField')[0].checkValidity(); // returns true|false

Um zu überprüfen, ob das Formular gültig ist, verwenden Sie:

$('#myForm')[0].checkValidity(); // returns true|false

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

Benutzeravatar von Boopathi.Indotnet
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.

    – Jamshad Ahmad

    31. Dezember 2019 um 7:26 Uhr

  • Ja, das funktioniert wie ein Zauber, aber nur, wenn der Browser dies unterstützt. caniuse.com/#search=reportValidity

    – Matt

    31. Januar 2020 um 21:28 Uhr

  • 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

Benutzeravatar von Martin Christensen
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.

    – Bobz

    14. Juli 2019 um 3:08 Uhr

    if $("form")[0].checkValidity()
      $.ajax(
        url: "url"
        type: "post"
        data: {

        }
        dataType: "json"
        success: (data) ->

      )
    else
      #important
      $("form")[0].reportValidity()

aus: HTML5-Formularvalidierung

Benutzeravatar von rynop
Rynop

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.

Benutzeravatar von vzr
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.

1443210cookie-checkSo erzwingen Sie die Validierung eines HTML-Formulars, ohne es über jQuery zu senden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy