Как я пишу функцию jQuery, которая принимает обратный вызов в качестве параметра

Не забудьте отметить «[x] Показать все настройки» внизу формы, иначе вы не сможете увидеть «Все языки».

48
задан sjors miltenburg 22 June 2009 в 23:07
поделиться

4 ответа

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');
    }
  );
};

Вы можете передавать функции как любой другой объект в JavaScript. Передать функцию обратного вызова очень просто, вы даже можете сделать это самостоятельно в вызове $. Post () .

Вы можете решить, хотите ли вы, чтобы обратный вызов вызывал как часть $. post () обратный вызов или самостоятельно.

75
ответ дан 7 November 2019 в 12:15
поделиться

Если я вас правильно понял, это так же просто, как установить другой параметр и вызвать переменную как функцию:

function foo(mycallback) {
    mycallback();
}
14
ответ дан 7 November 2019 в 12:15
поделиться

Почему бы и нет вы используете объект, который можно передать функции. Это намного больше похоже на jQuery, и это избавляет вас от наличия x именованных параметров, которые трудно поддерживать, поскольку они могут стать громоздкими, когда вы перейдете через 3 параметра.

например,

function callingFunction(){

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


      yourFunction( fnSettings );

}

function yourFunction( settings ) {

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

}
11
ответ дан 7 November 2019 в 12:15
поделиться

Вы знаете, что глобальные переменные и функции - зло, так почему бы не поместить свои в пространство имен 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
});

Прочтите этот пост, чтобы лучше понять понимание: Создание функций обратного вызова в jQuery

22
ответ дан 7 November 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: