2009-06-23 21 views
48

parametresi olarak kabul eden bir jquery işlevini nasıl yazarım?Bir geri bildirimi

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

     }); 

    }); 

}; 

Ama işlevinde geri aramalar için bu

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

nasıl uygulayabilir desteği gibi adlandırmak mümkün istiyorum?

cevap

75
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'teki diğer nesneler gibi işlevleri geçirebilirsiniz. Bir geri çağırma fonksiyonuna geçmek düz-ileri, hatta $.post() aramasında bunu kendiniz yapın.

Geri aranmanızın $.post() geri aranmasının bir parçası olarak mı, yoksa kendi başına mı geri çağırmak istediğinize karar verebilirsiniz. Ben doğru anlamak

+0

30 dakika boyunca tam olarak ne yapmaya çalıştığımı. Teşekkürler! bana yardımcı oldu –

+0

“if (typeof f ==” işlevi ”) f();” bölümü için teşekkürler. Onu arıyordum! – Garavani

14

, başka bir parametre ayarlama ve bir fonksiyonu olarak değişken çağıran kadar kolay:

function foo(mycallback) { 
    mycallback(); 
} 
11

Neden işleve geçebilir bir nesne kullanmayın. Bu çok daha fazla jQuery gibi ve size geçen 3 params alındığında hantal alabilirsiniz almak zor olan x adlandırılmış parametreleri sahip kaydeder.

function callingFunction(){ 

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


     yourFunction(fnSettings); 

} 

function yourFunction(settings) { 

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

} 
+0

Bu kesinlikle en temiz cevap (Ben benzer bir şey yazdım, bu yüzden önyargılı olabilir) – arviman

22

Sen küresel değişkenler ve fonksiyonlar kötü olduğunu biliyoruz, bu yüzden jQuery ad içine 's koyamazsınız neden örn:

$.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 
}); 

daha iyi anlamak için bu yazıyı okuyun: Creating callback functions in jQuery

+0

Cool. JQuery 'nin' $ .hide (555, function()) {}) 'gibi anonim bir işlevi nasıl oluşturabilirim? Veya callbackFnk cevabı mı? – aleXela

+0

Yeap, 'callbackFnk' yalnızca yerel bir değişkendir. Örnekte görebileceğiniz gibi, anonim bir işlev iletiyoruz: '$ .myFunc (args, function() {})'. – Uzbekjon

+0

Bir kez daha teşekkürler! Bir soru daha, ana func bitiminden sonra ateş edecek mi? – aleXela

İlgili konular