如何编写一个接受callback作为参数的jquery函数
我有以下function。
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); }); }); };
但是我想能够这样称呼它
ChangeDasPanel("../Home/Test", {} ,function (){ //do some stuff on callback }
我如何在我的函数中实现对callback的支持?
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中的任何其他对象一样传递函数。 传递callback函数很简单,你甚至可以在$.post()
调用中自己做。
您可以决定是否要将您的callback调用为$.post()
callback的一部分,或者是自行调用。
你知道全局variables和函数是邪恶的,为什么不把你的进入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中创buildcallback函数
如果我理解正确,就像设置另一个参数并将该variables作为函数一样简单:
function foo(mycallback) { mycallback(); }
为什么不使用可以传递给函数的对象呢? 这是更像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 ); }