48 votes

Comment puis-je écrire une fonction jquery qui accepte une fonction de rappel qu'un paramètre

J'Ai la fonction suivante.

function ChangeDasPanel(controllerPath, postParams) {

    $.post(controllerPath, postParams, function(returnValue) {

        $('#DasSpace').hide("slide", { direction: "right" }, 1000, function() {

            $('#DasSpace').contents().remove();

            $('#DasSpace').append(returnValue).css("display", "block");

            $('#DasSpace').show("slide", { direction: "right" }, 1000);

        });

    });

};

Mais je veux être capable de l'appeler comme cela

ChangeDasPanel("../Home/Test", {} ,function (){
  //do some stuff on callback
}

Comment puis-je mettre en œuvre un soutien pour les rappels dans ma fonction?

75voto

Tomalak Points 150423
function ChangeDasPanel(controllerPath, postParams, f) {
  $.get(
    controllerPath, 
    postParams, 
    function(returnValue) {
      var $DasSpace = $('#DasSpace');
      $DasSpace.hide(
        "slide", { direction: "right" }, 1000, 
        function() {
          $DasSpace.contents().remove();
          $DasSpace.append(returnValue).css("display", "block");
          $DasSpace.show("slide", { direction: "right" }, 1000);
        }
      );
      if (typeof f == "function") f(); else alert('meh');
    }
  );
};

Vous pouvez passer des fonctions comme n'importe quel autre objet en JavaScript. En passant dans une fonction de rappel est simple, vous pouvez même le faire vous-même dans l' $.post() appel.

Vous pouvez décider si vous voulez avoir votre callback appelé dans le cadre de l' $.post() de rappel ou sur son propre.

22voto

Uzbekjon Points 822

Vous savez que les variables globales et les fonctions sont mal, alors pourquoi ne pas mettre le votre en l'espace jQuery:

$.extend({
  myFunc : function(someArg, callbackFnk){
    var url = "http://example.com?q=" + someArg;
    $.getJSON(url, function(data){

      // now we are calling our own callback function
      if(typeof callbackFnk == 'function'){
        callbackFnk.call(this, data);
      }

    });
  }
});

$.myFunc(args, function(){
  // now my function is not hardcoded
  // in the plugin itself
});

Lire cet article pour mieux comprendre: la Création de fonctions de rappel en jQuery

14voto

pluma Points 2958

Si je vous comprends bien, c'est aussi facile que de définir un autre paramètre et l'appel de la variable d'une fonction:

function foo(mycallback) {
    mycallback();
}

11voto

redsquare Points 47518

Pourquoi n'utilisez-vous pas un objet que vous pouvez passer à la fonction. Il est beaucoup plus jQuery et comme il vous évite d'avoir x paramètres nommés qui est difficile à maintenir, car il peut devenir difficile lorsque vous avez passé 3 params.

e.g

function callingFunction(){

      var fnSettings: {
        url: someUrl,
        data: params,
        callback : function(){}
      };


      yourFunction( fnSettings );

}

function yourFunction( settings ) {

      $.post( settings.url, settings.data, settings.callback );

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X