Probleme beim Senden von Formularen und Aufrufen von Ereignissen in der Warteschlange nach einem asynchronen Ereignis

StackOverflow https://stackoverflow.com//questions/10655710

Frage

Ich habe dies am lokalen Setup (mit jquery.1.6.4), aber es funktioniert nicht beim Entwickler-Setup (jquery.1.3.2).

Betrachten Sie das folgende Formular -

<form onsubmit="return validateMacros();">
     <input id="formsubmitbutton" type="submit" name="formsubmitbutton" value="Submit" />
</form>

Beachten Sie die validateMacros(); rufen Sie oben an.

Und das folgende Javascript -

jQuery(document).ready(function()
{

$("input#formsubmitbutton").click(preValidateUrls); 

        function preValidateUrls(evt)
        {
                evt.preventDefault(); //to prevent form submission until completion of async event

                $.ajax({
                    ...
                    ...
                    success: function(res)
                    {
                         $("form#frmBanners").submit();  //This submits the form in case of both versions but in 1.3.2 case, the validateMacros() function is not called
                    }
               });
       }

});

function validateMacros()
{
   //some logic here - which is not executing in case of jquery.1.3.2
}

Wenn jquery.1.6.4 geladen ist, wird die Funktion validateMacros() wird nach Abschluss der Ausführung von ausgeführt preValidateUrls(), was erwünscht ist.

Aber wenn jquery.1.3.2 ist geladen, validateMacros() wird überhaupt nicht ausgeführt und das Formular wird nur gesendet.

Wie mache ich es auf beiden Versionen zum Laufen.Was mache ich falsch?

War es hilfreich?

Lösung

Gehen Sie unauffällig!

$('form#frmBanners').on('submit', validateMacros);

Was wir hier machen, ist abonnieren die Funktion zum submit ereignis des Formulars, nachdem Sie ihm eine ID gegeben haben (mir ist gerade aufgefallen, dass Sie es verwendet haben frmBanners als Beispiel).Unaufdringlich bedeutet, dass Sie kein Javascript in Ihren HTML-Code einfügen, was der Hauptzweck von Bibliotheken wie jQuery ist.Fügen Sie also an einer beliebigen Stelle in Ihrer externen Javascript-Datei die oben angegebene Zeile ein.Jedes Mal, wenn das Formular ist hochgeladen und nicht sobald auf die Senden-Schaltfläche geklickt wird, wird die Funktion aufgerufen.

Also, wenn du anrufst $("form#frmBanners").submit();, wird das Ereignis ausgelöst und die Funktion aufgerufen.Dies ist ein Schritt näher an der Einhaltung der Konvention, was das Auslösen solcher Ereignisse angeht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top