it-swarm.com.de

Das Formular wird beim zweiten Aufruf nicht gesendet

Ich habe jetzt seit über einer Woche mit dem folgenden Problem zu kämpfen, entschuldigen Sie bitte die lange Beschreibung. Ich möchte, dass es so genau und klar wie möglich ist:

Ich benutze das Plugin "simplr registration form", um neue Benutzer zu registrieren. Ich muss dem Formular ein Feld "Adresse" hinzufügen, damit die Benutzer es ausfüllen können. Wenn Sie auf die Schaltfläche "Senden" klicken, wird die Adresse an die Google Maps-API gesendet und der Längen- und Breitengrad wird zurückgegeben, der dann zusammen mit in wpdb gespeichert werden soll die restlichen Daten des Benutzers. Um dies zu erreichen, habe ich die folgende PHP-Funktion hinzugefügt, die das HTML-Formular erstellt:
- Adresseingabefeld
- 2 versteckte Felder für den Lat & Long
- jQuery-Funktion, die auf den Submit-Button reagiert und ihre Aufgabe erfüllen soll, nachdem der Button angeklickt wurde, aber bevor das Formular tatsächlich gesendet und von der PHP-Funktion des Plugins verarbeitet wird.

Da die Verwendung der Google Maps-API asynchron ist, um die Aufgabe zu erledigen, muss ich Folgendes tun:

Schreiben Sie eine Funktion, die auf den Submit-Klick reagiert.
Diese Funktion sollte verhindern, dass das Formular gesendet wird, und eine andere Funktion aufrufen, die das Google Maps-Zeug ausführt und das Formular nach Abschluss sendet.
Das Problem liegt bei der zweiten Vorlage. Das passiert einfach nicht.
Ich habe verschiedene Möglichkeiten ausprobiert (mit jquery):
- Eine Submit-Funktion, die sich selbst mit einem Flag aufruft, das der ersten Iteration mitteilt, dass sie nicht gesendet werden soll und der zweiten, die gesendet werden soll. Der Code funktioniert einwandfrei bis zur zweiten Iteration, die einfach nicht funktioniert.
- eine Submit-Funktion, die "this.submit ()" aufruft. Auch hier bewirkt "this.submit ()" nicht, dass das Formular gesendet wird.
- eine Klickfunktion, die auf das Klicken auf die Übermittlung reagieren soll, die Google-Aufgaben erledigt und dann die Übermittlungsfunktion aufruft. Hier wird sogar die Klickfunktion überhaupt nicht ausgelöst.

// This is the button's definition:
$form .=  apply_filters('simplr-reg-submit', '<input type="submit" name="submit-reg" id="submit-reg" value="Register" class="submit button">');

// This is the php code that starts handling the submitted form 
if(isset($_POST['submit-reg'])) {

Hier ist ein Beispiel für einen meiner Versuche:

function codeAddress(callback)
{
    // do the google stuff
    // when finished submit the form
    $('#simplr-reg').get(0).submit();

    // it's all being done except for the submit part
}

$('#simplr-reg').submit(function(event)
{
    codeAddress(function(success){}); //callback from googlemaps
    event.preventDefault();
}

// Here's a simplified example:
$('#simplr-reg').submit(function(event)
{
    this.submit(); //doesn't cause the form to submit
    event.preventDefault();
});

Wenn ich event.preventDefault () nicht verwende und in der ersten Iteration abschicke, wird es gut abgeschickt.

Ich habe versucht, dieses Problem mit Hilfe der Leute von stackoverflow zu lösen, aber niemand konnte herausfinden, was nicht stimmt. Ich vermute, es hat etwas mit WordPress oder dem Plugin zu tun.

1
Ash

Die PHP-Funktion, die die übergebenen Werte in diesem Plugin verarbeitet, prüft zuerst, ob der Wert des Buttons isset ist. Wenn Sie das Original verwenden, senden Sie es ab. Wenn Sie preventDefault() verwenden und dann submit() aufrufen, ist dies nicht der Fall, und aus diesem Grund verarbeitet das PHP das übermittelte Formular nicht, sondern erstellt es neu. Um dies zu beheben, habe ich gerade zur isset() eine Prüfung hinzugefügt, ob die Lat/Long-Werte wahr sind. Das hat den Trick gemacht.

2
Ash

Ich glaube, diese Frage gehört nicht hierher, aber trotzdem.

OK, Ash, versuche deine Logik so:

<script>
var wasGoogleFetchSuccess = 0;

$('#simplr-reg').submit(function() {

    if(wasGoogleFetchSuccess == 1) {
        return true; // I can now submit form as normal
    } else {
        goDoGoogleMapAddressSearch();
        return false; // dont submit form this time round
    }

});

function goDoGoogleMapAddressSearch() {
    //Do google map search
    //On success or completion do the following:
    $("blah blah blah").success(function() { // Just an example
        wasGoogleFetchSuccess = 1;
        $('#simplr-reg').submit();
    });
}
</script>
0
Brady