2012-07-24 19 views
3

我想創建我自己的jquery函數,我知道如何添加選項,但不知道如何添加'onStart'或'onComplete'功能。如何使用onstart和oncomplete創建jquery函數

這是我目前所知:

jQuery.somefunctionname = function (options) { 
var settings = {}, 
    defaults = { 
     'someoption': 'somevalue', 
     'someoption2': 'somevalue2', 
     'someoption3': 'somevalue3' 
    } 
settings = $.extend({}, defaults, options); 

    //do something functional 
    alert("hey i'm a function"); 
} 

,但如果我希望用戶能夠添加自己的代碼之前(在onStart)後(的onComplete)我的職責,我應該怎麼代碼?

用戶應該能夠寫出這樣的:

$.somefunctionname({ 
    'someoption' : 'a', 
    'someoption2' : 'b', 
    'someoption3' : 'c', 

    'onStart' : function() { 
     //whatever user want when my function started 
    }, 
    'onComplete' : function() { 
     //whatever user want when my function ended 
    } }); 

THX)

回答

4

在你的函數,做這樣的事情:

jQuery.somefunctionname = function (options) { 
    if (typeof options.onStart === "function") 
     options.onStart.call(this); 

    // other function code here 

    if (typeof options.onComplete === "function") 
     options.onComplete(); 
     // OR 
     options.onComplete.call(this); 
     // OR 
     options.onComplete.apply(this, argsArrayIfDesired); 
     // etc. 
}; 

也就是說,如果財產是options定義,其實是那麼功能調用它在適當的點。如果需要,使用.call().apply()指定this的設置,幷包括任何參數。根據需要與您的settings對象進行整合。

+0

thx夥計。有用! – 2012-07-24 10:20:40

3

簡單得爲jQuery.noop這些設置的默認值,然後你就可以知道它是安全調用該設置的值作爲函數,使用apply()或類似的。

例如

jQuery.somefunctionname = function (options) { 
var settings = {}, 
    defaults = { 
     'someoption': 'somevalue', 
     'someoption2': 'somevalue2', 
     'someoption3': 'somevalue3', 
     'onStart': jQuery.noop, 
     'onComplete': jQuery.noop 
    } 
settings = $.extend({}, defaults, options); 

    settings.onStart.apply(this); 

    //do something functional 
    alert("hey i'm a function"); 

    settings.onComplete.apply(this); 
} 
+0

它給了我錯誤'settings.onStart是未定義'。我不知道爲什麼。 – 2012-07-24 10:21:13