Wie kann ich eine Formularaktion ungültig machen und jQuery ausführen, wenn alle HTML-Formularelemente validiert sind?

Lesezeit: 4 Minuten

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

Irgendwelche Gedanken?

HTML

<form action="donothing" id="membershipform" method="get" accept-charset="utf-8">
    <input type="text" class="borderr3 innershadow3" name="some_name" value="" id="some_name" placeholder="first and last name" required>
    <input type="email" class="borderr3 innershadow3" name="some_name" value="" id="some_name" placeholder="email" required>
    <input type="phone" class="borderr3 innershadow3" name="some_name" value="" id="some_name" placeholder="phone" required>    
    <input type="phone" class="borderr3 innershadow3" name="some_name" value="" id="some_name" placeholder="mailing address" required>      
    <input type="phone" class="borderr3 innershadow3" name="some_name" value="" id="some_name" placeholder="how you heard about us" required>
    <p>
        <input type="submit" id="submitbtn" class="submitbtn" value="Continue" style="width:265px">
    </p>
</form> 

Javascript:

$(function(){
  $("#submitbtn").click(function(){
    $.ajax({
      url: "<?php bloginfo('template_url') ?>/ajax-membership.php",
      success: 
      function(txt){
        if(txt){
          $("#thankyou").slideDown("slow");
        }
      }
    });
  });
});

Benutzeravatar von Milimetric
Milimetrisch

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()

In deinem Beispiel:

<script>
    document.querySelector('#membershipform').reportValidity()
</script>

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.

Benutzeravatar von Chirag
Chirag

Verwenden von reinem Java-Skript

<script>

    document.getElementById('membershipform')
        .addEventListener("submit", 
            function(event) {
                event.preventDefault();

                // write stuff

            });

</script>

1445900cookie-checkWie kann ich eine Formularaktion ungültig machen und jQuery ausführen, wenn alle HTML-Formularelemente validiert sind?

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

Privacy policy