2017-09-12 4 views
0

Finishing habe ich diesen Eingang:wie eine Funktion auszuführen, nachdem die ersten

<button type="button" title="test" class="button btn-cart" onclick="productAddToCartForm.submit(this); redirectToCart();">OK</button> 

Ich mag die redirectToCart() nach Beendigung des ersten productAddToCartForm.submit(this) auszuführen, aber ohne auf den ersten bewegten, ich meine die productAddToCartForm.submit(this) bleiben soll In OnClick-Taste.

function redirectToCart() 
{ 
    window.location.replace("http://stackoverflow.com"); 
} 
+0

Fügen Sie die 'form' HTML und die' submit' Funktion hinzu, wenn Sie welche haben. – sabithpocker

+0

Nein, tut mir leid, ich habe nicht nur einen Button in der Fancy-Box, der 'productAddToCartForm.submit (this) 'aufruft, was ich brauche, ist nach der Beendigung der Funktion auf eine andere Seite umzuleiten. – Prince

+0

Was ist' productAddToCartForm'? Ist es ein HTMLForm? Können Sie auch die Funktionsdefinition 'submit()' hinzufügen? Die normale HTML-Formularübertragung führt zu einem vollständigen Neuladen der Seite, abhängig vom Ziel des Formulars. Sie müssen [AJAX für andere Verhaltensweisen verwenden] (https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript) – sabithpocker

Antwort

0

Es ist einfacher und bevorzugt, die Inline-Ereignisse nicht zu verwenden.

Erstellen Sie einfach einen Ereignis-Listener und rufen Sie beide Funktionen von dort.

var myButton; 
myButton.addEventListener('click', function (e) { 
    productAddToCartForm.submit(this); 
    redirectToCart(); 
}); 
+0

ich was in onclick button setzen? – Prince

+0

Ihre Lösung ruft die zwei Funktionen nacheinander auf, aber was ich brauche, ist zu warten, bis die erste fertig ist und dann die zweite auszuführen – Prince

+0

Dies ist nicht asynchron. Die Funktionen werden einzeln aufgerufen und ausgeführt. Ich verstehe nicht, wovon du sprichst. –

0

Wenn productAddToCartForm ist Ihr Javascript Formularelement, können Sie tun:

productAddToCartForm.onload = redirectToCart; 
1

ich einige Annahmen hier machen werde, aber das Prinzip sollte funktionieren.

In erster Linie nehme ich an, dass productAddToCardForm.submit(this) eine AJAX-Anfrage auslöst, entweder nativ oder mit jQuery. In jedem Fall müssen Sie verspricht, um dies zu behandeln.

Es gibt einen umfassenden Leitfaden here, aber die Grundlagen sind wie folgt:

  1. Return ein Versprechen von Ihrem ersten Funktion
  2. Führen Sie Ihre zweite Funktion, wenn die erste Funktion

erfolgreich aufgelöst wird, könnte in etwa so aussehen:

function myFirstFunction(packet) { 
    return new Promise(function(resolve, reject) { 
    resolve(productAddToCartForm.submit(packet)) 
    }); 

function doBothThings(packet) { 
    myFirstFunction().then(redirectToCart()) 
}; 

Ich habe eine schnelle fiddle zusammengestellt, die das besser zeigt.

Hinweis: Dies ist der einfachste Anwendungsfall für Promises, aber sie sind ein wirklich mächtiges Werkzeug. Die vollständigen technischen Daten sind here.

+0

doBothThings ist nicht definiert – Prince

+0

Es gibt ein paar Fehler in diesem Code, sorry.Versuche es jetzt zu beheben – jymbob

Verwandte Themen