如何使用onstart和oncomplete创建jquery函数

时间:2012-07-24 06:36:21

标签: javascript jquery

我正在尝试创建自己的jquery函数,我知道如何添加选项但不知道如何添加'onStart'或'onComplete'功能。

这是我目前所知道的:

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

2 个答案:

答案 0 :(得分: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中定义并且实际上是一个函数,则在适当的位置调用它。如果需要,使用this.call()指定.apply()的设置,并包含所有参数。根据需要与您的settings对象集成。

答案 1 :(得分:3)

只需拥有jQuery.noop这些设置的默认值,然后您就可以知道使用apply()或类似功能将该设置的值作为函数调用是安全的。

e.g。

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