2017-09-12 1 views
0

j'ai cette entrée:comment exécuter une fonction après avoir terminé la première

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

je veux exécuter le redirectToCart() après avoir terminé la première productAddToCartForm.submit(this) mais sans déplacer la première sur, je veux dire le productAddToCartForm.submit(this) devrait rester dans le bouton onclick.

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

Ajoutez la fonction HTML 'form' et la fonction' submit' si vous en avez. – sabithpocker

+0

Non, désolé je n'ai pas c'est juste un bouton dans la boîte fantaisie qui appelle le 'productAddToCartForm.submit (this)' ce dont j'ai besoin est de rediriger vers une autre page après avoir terminé la fonction – Prince

+0

Qu'est-ce que 'productAddToCartForm'? Est-ce un HTMLForm? Aussi pouvez-vous ajouter la définition de la fonction 'submit()'? La soumission d'un formulaire HTML normal entraîne un rechargement complet de la page en fonction de la cible du formulaire. Vous devrez [utiliser AJAX pour d'autres comportements] (https://developer.mozilla.org/en-US/docs/Learn/HTML/Forms/Sending_forms_through_JavaScript) – sabithpocker

Répondre

0

Il est plus facile et préférable de ne pas utiliser les événements en ligne.

Créez simplement un écouteur d'événement et appelez les deux fonctions à partir de là.

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

i mettre quoi dans le bouton onclick? – Prince

+0

Votre solution appelle les deux fonctions successivement, mais ce dont j'ai besoin, c'est d'attendre que la première soit terminée et ensuite d'exécuter la seconde – Prince

+0

Ceci n'est pas asynchrone. Les fonctions sont appelées et courues une à la fois. Je ne comprends pas de quoi tu parles. –

0

Si productAddToCartForm est votre élément de formulaire javascript, vous pouvez le faire:

productAddToCartForm.onload = redirectToCart; 
1

Je fais quelques hypothèses, mais le principe devrait fonctionner.

Principalement, je suppose que productAddToCardForm.submit(this) déclenche une requête AJAX, soit en mode natif, soit en utilisant jQuery. Dans les deux cas, vous devez utiliser promesses pour gérer cela.

Il y a un guide complet here, mais les bases sont les suivantes:

  1. Retour une promesse de votre première fonction
  2. Exécutez votre deuxième fonction lorsque la première fonction résout avec succès

Ce pourrait ressembler à ceci:

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

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

J'ai mis en place un rapide fiddle qui le démontre mieux. NB: Il s'agit du cas d'utilisation le plus simple pour Promises, mais il s'agit d'un outil très puissant. Les spécifications complètes sont here.

+0

doBothThings n'est pas défini – Prince

+0

Il y a quelques erreurs dans ce code, désolé.Essayer de le réparer maintenant – jymbob