2010-06-29 161 views
2

我在创建回调函数时遇到了问题。首先,据我所知,回调就像一个参数,当其“父”函数中的所有动作完成时触发。例如:Jquery回调函数

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

起初<p>被隐藏起来,只有事后再次显示。

如何将这种回调应用于随机插件中?

例如一个插件看起来是这样的:

$.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

你究竟想完成什么? – quantumSoup 2010-06-29 12:49:24

+0

我正在尝试回调以正确的方式工作,就像在大多数jQuery方法中一样。 $(document).ready(function(){*在这里发生的Everething发生在Dom被加载之后,但之前没有,所以它是一个回调* /});我想知道如何在我的插件中写回调 – tylik 2010-06-29 16:12:15

回答

1

A callback function是一个函数,它被传递给另一个函数/方法并在某个点被调用。

如果我们创建一个像

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

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

的功能,我们现在有一个功能,它调用另一个函数。在这个例子中,它通过它分析one参数并在this范围内调用我们的回调函数。

的调用看起来像

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

我们传递了一个匿名函数(更precisly,参考),以mightyplugin(),我们可以在那里访问我们的参数,因为我们称之为一个范围和匿名函数参数数组(其中只包含原始参数)。

这些构造必须已经由插件实现,否则您需要创建自己的功能。

+0

感谢您的回答。但我需要一个回调,只有在mightyPlugin完成所有分配给它的事情之后才会触发 – tylik 2010-06-29 13:29:47

+0

//这里的大代码块首先发生,并且只有在回调应该触发 – tylik 2010-06-29 13:31:05

4

随机插件,您可以不适用它。如果在不同事件发生时插件未写入触发回调函数,则不能使用它们。

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