2010-08-02 8 views
0

J'ai deux fonctionsarrêt de travail de la fonction d'une autre fonction

function1() 
{ 
    //... 
} 

à function1 je faire une demande ajax et charger une image

il y a une autre fonction - function2 où j'appelle function1 pour charger une image.

maintenant, quelle est la question.

Comment puis-je arrêter la propagation de function1 avant de l'appeler à nouveau dans function2?

function2() 
    { 
     // ... 
     // how stop old propogation of function1 here? 
     function1(); //call function1 again 

    } 

Merci

+0

Vous souhaitez abandonner la requête AJAX en cours de la fonction1? –

+0

Je dois arrêter le chargement de l'image avant de commencer un nouveau chargement (c'est-à-dire arrêter 'function1' et le redémarrer à nouveau). – Simon

Répondre

0

Umm Je ne comprends pas vraiment ce que vous essayez de faire ici, mais encore ......

Si vous essayez d'annuler la demande AJAX, je ne » Je pense qu'il existe une solution facile. Il serait préférable d'initier une autre demande pour inverser/arrêter les changements.

Mais comme vous demandez "Comment arrêter une fonction?", Ma réponse est pourquoi l'initier à un endroit où il n'est pas nécessaire. Appelez-le si nécessaire.

Si vous voulez réellement l'initialiser & sur un événement spécifique, définissez un bloc if dans la fonction. Ou plutôt dans votre cas définir un drapeau dans la fonction 1 & changer de la fonction 2.

+0

le problème est le suivant: dans 'function2' sur l'événement' mousemoove' de certains éléments, j'appelle 'function1' pour charger une image. Mais si je déplace la souris pendant un long moment (appelez la fonction1 beaucoup de fois) comme résultat je n'obtiens pas l'image finale (j'obtiens une image de l'état actuel), donc je veux arrêter propogetin des premiers appels de fonction. .. – Simon

0

Utilisez un drapeau que vous pouvez manipuler dans une plus large portée. Comme:

flag = false; 

function function2(){ 
    if(flag) function1(); 
} 

maintenant vous pouvez appeler

function2(); // and function1 will not be called 

ou un ensemble:

flag = true; 

function2(); //now function1() will be called. 
+0

:) j'ai besoin de la variante inverse. un besoin d'appeler 'function1' de toute façon. mais avant d'arrêter ça marche d'un autre appel avant .. – Simon

0

Plutôt que de charger l'image immédiatement func1() est appelée, vous pouvez insérer un peu de retard; De cette façon, vous pouvez annuler le téléchargement précédent et en programmer un nouveau chaque fois que la fonction est appelée. Voici un exemple:

var delay = 3500, // Delay for 3.5 seconds 
    timeoutId; 

function func1(url) { 
    if (timeoutId) clearTimeout(timeoutId); 
    setTimeout(function() { 
     // Add code to download image here 
    }, delay); 
} 

function func2() { 
    // As long as you call func1 again before the timeout elapses, the 
    // previous download should be cancelled, leaving you with the last 
    // selected image 
} 
Questions connexes