2010-06-29 4 views
2

J'ai un problème lors de la création d'une fonction de rappel. Tout d'abord, pour autant que je puisse comprendre, un rappel agit comme un paramètre qui se déclenche quand toute l'action de sa fonction "parent" est terminée. Par exemple:Fonction de rappel Jquery

$('p').hide('slow', function() { 
    $(this).show('slow'); 
}); 

Dans un premier temps <p> est caché, et seulement après, il montre à nouveau. Comment puis-je appliquer un tel rappel dans un plugin aléatoire?

Comment puis-je appliquer un tel rappel dans un plugin aléatoire?

Par exemple, un plug-in ressemble à ceci:

$.fn.myPlugin = function(settings) { 
    return this.each(function() { 
    settings = $.extend({ onShow: null }, settings); 
    $(this).hide('slow'); /*This action should happen first (First action)*/ 
    if ($.isFunction(settings.onShow)) 
    settings.onShow.call(this);/*Callback should fire after First action has stopped*/ 
    } 
    }); 
}; 


$(document).ready(function() 
    $('p').myPlugin({ 
    onShow: function() { 
    alert('My callback!');/*Both actions(element hiding and alert) 
          fire simultaneously, but I need alert 
          to fire after element is hidden*/ 
     } 
    }); 
}); 
+2

Qu'essayez-vous exactement d'accomplir? – quantumSoup

+0

J'essaye un callback pour fonctionner correctement, comme dans la plupart des méthodes jquery. $ (document) .ready (function() {* Tout se passe ici quand Dom est chargé mais pas avant, donc c'est un callback * /}); Et je voudrais savoir comment écrire un rappel dans mon plugin – tylik

Répondre

1

Une fonction callback function est une fonction qui est transmise à une autre fonction/méthode et est appelée à un moment donné.

Si nous créons une fonction comme

function mightyplugin(foo, callback){ 
    // big code block here 

    callback.apply(this, [foo]); 
} 

nous avons maintenant une fonction qui appelle une autre fonction. Dans cet exemple, il analyse le paramètre one et appelle notre fonction de rappel dans la portée de this.

Un appel ressemblerait

mightyplugin("Bar!", function(param){ 
    alert(param); 
}); 

nous passons une fonction anonyme (plus précisement, une référence) à mightyplugin() et nous pouvons accéder à notre paramètre là-bas, puisque nous appelons cette fonction anonyme avec une portée et une tableau de paramètres (qui ne contient que le paramètre d'origine ici).

Ces constructions doivent déjà être implémentées par un plugin, sinon vous devez créer votre propre fonctionnalité.

+0

Merci pour votre réponse. Mais j'ai besoin d'un rappel pour être déclenché seulement après que mightyPlugin a fini de faire tout ce qui lui est assigné – tylik

+0

// gros bloc de code ici sholud arrivera en premier, et seulement après cela un rappel devrait se déclencher – tylik

4

Vous ne pouvez pas l'appliquer dans un plug-in aléatoire. Si le plugin n'est pas écrit pour déclencher des fonctions de rappel lorsque différents événements se produisent, vous ne pouvez pas les utiliser.

0
function loadAjax(paramUrl, paramData, paramType, paramAsync) { 
    var result = "" 
    $.ajax({ 
      url: paramUrl, 
      data: paramData, 
      type: paramType, 
      async: paramAsync, 
      success: function (res) { 
       result = res 
      }, 
      error: function (data) { 
       alert("Unexpected error: " + data.val()); 
      } 
     }); 
    return result; 
}