Aktion vor dem Absenden des Formulars ausführen?

Lesezeit: 3 Minuten

Ich habe dieses HTML-Formular mit einer ID und ich habe diese ID an die Submit-Funktion gebunden. Was ich möchte, ist, wenn ein Benutzer auf Senden klickt, erscheint ein Popup wie eine modale Box, die ihm dankt. Und erst nachdem sie vom Bildschirm geklickt haben oder wenn sich die Modalbox schließt, möchte ich, dass das Formular gesendet und die Seite aktualisiert wird.

Aber so wie ich es jetzt habe, scheint es sich zu erneuern, egal was passiert. Ich verwende das ausgefallene Popup-Plugin für die Modalbox.

<form action="submit-comment.php" method="post" id="form">
<input type="text" name="comment" />
<input type="submit" name="submit" value="Submit" />
</form>

jQuery("#form").submit(function() {
     jQuery.fancybox('<div class="box">Some content</div>', {
           'onClosed' : function() { return true; }
            }     
     });
});

Wie Sie sehen können, versuche ich ihm zu sagen, dass es nur beim Schließen wahr zurückgeben soll, aber es funktioniert nicht wirklich.

Irgendwelche Ideen?

  • Das ist eine sehr gefährliche Funktionalität. Wenn ein Benutzer ein Formular absendet und eine Dankesnachricht sieht, würde er/sie erwarten, dass die Daten bereits übermittelt wurden, und kann das Fenster oder die Registerkarte einfach schließen, ohne tatsächlich etwas übermittelt zu haben. Ich rate Ihnen dringend, zuerst die Daten zu übermitteln und dann eine entsprechende Nachricht (Danke für Erfolg oder Fehler für Fehler) basierend auf der zurückgegebenen Antwort anzuzeigen.

    – Amustill

    23. Mai 2011 um 21:17 Uhr

Benutzer-Avatar
Naftali

Versuche dies:

jQuery("#form").submit(function(e) {
     var self = this;
     e.preventDefault();
     jQuery.fancybox('<div class="box">Some amazing wonderful content</div>', {
           'onClosed' : function() { 
                          self.submit();
                        }
     });
     return false; //is superfluous, but I put it here as a fallback
});

Javascript ist asynchron, sodass Sie die Rückgabeanweisung nicht verzögern können.


AKTUALISIEREN

Damit der obige Code funktioniert, ändern Sie die name Ihrer Submit-Schaltfläche an etwas anderes, zum Beispiel:

<input type="submit" name="submit_me" value="Submit" />

  • @lonesomeday, ich habe es normalerweise nur als Fallback für die preventdefault

    – Naftali

    23. Mai 2011 um 21:15 Uhr

  • @lonesomeday – genau das wollte ich sagen. (+1 von mir auch Neal)

    – karim79

    23. Mai 2011 um 21:15 Uhr

  • @Neal Aber jQuery macht das unnötig, und Sie verhindern die Ausbreitung, wo Sie nicht wirklich wollen …

    – einsamer Tag

    23. Mai 2011 um 21:17 Uhr

  • @lonesomeday, ich habe in meiner Antwort einen Kommentar dazu hinzugefügt

    – Naftali

    23. Mai 2011 um 21:17 Uhr

  • @amustill, self.subit() ruft die native DOM-Submit-Aktion auf. Wenn ich es tat $(self).submit() dann hätte ich Probleme mit einer Endlosschleife

    – Naftali

    23. Mai 2011 um 21:21 Uhr


(Antwort auf Ricks Frage unter Neals Antwort: “irgendein anderer Weg? Weil ich keinen direkten Zugriff auf dieses HTML habe”)

Wenn Sie aus irgendeinem Grund eine Submit-Schaltfläche mit ID=”submit” benötigen und die form.submit-Methode nicht verwenden können (weil sie mit “input[type=submit]#submit”-Button) können Sie dies tun:

$('<form>')[0].submit.call(form); //jQuery
//OR:
document.createElement('form').submit.call(form); //pure HTML w/o any framework

dh erstellen Sie ein neues leeres Formular und verwenden Sie seine Submit-Methode, um es im Bereich Ihres eigenen Formulars aufzurufen

1175100cookie-checkAktion vor dem Absenden des Formulars ausführen?

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

Privacy policy