2010-06-29 162 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; 
}