2012-01-10 6 views
1

J'ai écrit un rappel (je crois qu'il est appelé) comme ceci:Rappel dans un rappel?

hugeFadeIn(); 

Il est un simple code à disparaître dans un certain contenu afin que je ne pas réutiliser le même code encore et encore.

Je voulais alors exécuter du code après hugeFadeIn finitions ... donc je l'ai fait:

hugeFadeIn(){ 
    //la la la 
}); 

Et c'était mal, alors je l'ai fait:

$(hugeFadeIn(){ 
    //la la la 
}); 

Et je Je reçois encore des erreurs. Qu'est-ce que je fais mal? Merci à tous :)

Modifier Comme demandé, le corps de la fonction hugeFadeIn:

function hugeFadeIn() { 
    $("#huge-loader").fadeIn("fast"); 
} 
+0

Pourquoi ne pas simplement mettre les deux fonctions l'une après l'autre? Ou est le hugeFadeIn() seulement utilisé comme fonction de rappel? –

+0

pourriez-vous poster le corps de la fonction hugeFadeIn()? – fcalderan

Répondre

2

Si vous voulez courir un peu chose après hugeFadeIn finitions, vous devez passer votre rappel dans.

function hugeFadeIn(after) { 
    // whatever 
    after(); 
} 

(Si hugeFadeIn-ce que le fondu lui-même et ne se fie pas à appeler quelque chose qui se prend un rappel.)

Modifier après OP modifier.

function hugeFadeIn(after) { 
    $("#huge-loader").fadeIn("fast", after); 
} 
+0

Merci Dave, qu'est-ce que le 'after' veut dire? Est-ce réel ou simplement utilisé comme exemple? – pufAmuf

+0

@pufAmuf C'est le nom du paramètre de la fonction, comme toute déclaration de fonction. –

+0

[voir la documentation de fadeIn] (http://api.jquery.com/fadeIn/). Si vous voulez exécuter une fonction 'myFunc' après la fin du fondu, vous devriez passer cette fonction en tant que second argument' fadeIn (...) ':' $ ("# énorme-loader"). FadeIn ("fast ", myFunc)". la façon la plus simple de le faire est de déclarer un paramètre dans 'hugeFadeIn' comme dans le post ci-dessus, puis d'appeler' hugeFadeIn (myFunc); ' – akoptsov

1

fermer ...

hugeFadeIn(function() { 

    alert('My callback is running'); 

}); 

Puis, en hugeFadeIn()

hugeFadeIn = function(fn) { 

    fn(); 

} 
+0

Salut Seth, merci pour la réponse! Puis-je demander cependant que ce code dans 'hugeFadeIn' (le second)? – pufAmuf

+0

Je ne comprends pas l'affectation à 'hugeFadeIn'. –

+0

Est-ce que cela vise à moi? La raison en était pour moi d'utiliser un code qui pourrait facilement être réutilisé partout et changé sans avoir à tout changer un par un. – pufAmuf

1

function hugeFadeIn(time, callback) { 
    $('.something').fadeIn(time, callback); 
} 

Alors

hugeFadeIn(500, doAjaxWhathever); 

ou quelque chose comme ça pour async

$.HugeFade = function(item, time, callback) { $(item).fadeIn(time); callback();} 
$.HugeFade('#myDiv', 1500, myCallback); 

Mais si vous re en utilisant hugeFadeIn comme un rappel, vous ne pouvez pas faire

$('#myDiv').load(url, hugeFadeIn(500, callback2)); //wrong 
// it should be.. 
$('#myDiv').load(url, function(){hugeFadeIn(500, callback2)}); 
+0

Pas vraiment; 'fadeIn' est asynchrone. –

+0

right, fixed ... –

1

si vous avez besoin de faire quelque chose avec le même élément juste d'appel mis la deuxième méthode après première

hugeFadeIn(); 
someOtherMethodCall(); 

Si vous avez besoin pour traiter un autre élément sur la page et vous devez forcer l'appel de la seconde méthode après la fin de la première méthode - utilisez la méthode du délai (http: //api.jquery.com/délai /)

hugeFadeIn(); 
someOtherMethodCall(); 

someOtherMethodCall(time){ 
    $('#some-id').delay(time).hide(); 
} 
+0

Pourquoi ne pas utiliser les fonctions intégrées de jQuery à la place? –

1

quand j'écris une fonction, je mets généralement un paramètre pour le rappel:

function myFunction(param1, callback_param){ 

    alert(param1); // do stuff here 

    if(typeof(callback_param) == "function"){ 

     callback_param(); 

    } 
} 

et voici comment je l'appelle.

myFunction('Hello World', function(){ 
    alert('Yes!, this is the World, how can i help you?'); 
}); 

espérons que cela contribue. merci