2011-08-15 17 views
1

我正在寫我的第一個基於this documentation的jQuery插件,我對此有疑問。這個特殊的例子告訴你如何與元素使用jQuery的方法,如:結構使用jQuery作爲函數和方法?

$("myelement").myfunction({title: blah}); 

但是,我怎麼可以把它作爲一個獨立的功能,沒有一個元素?例如:

$.myfunction({title: blah}); 

當我這樣做的那一刻,我得到「$ .myfunction是不是一個函數」

謝謝!

編輯:當前代碼:

(function($){ 
    $.fn.tasks = function(options) { 

    var defaults = { 
     'action' : 'gettasks', 
     'list'  : 'default', 
     'task'  : '', 
     'title'  : '' 
    }; 

    var options = $.extend({}, defaults, options); 

    return this.each(function() { 

     var $this = $(this); 
     var ajax_load = "<img class='loading' src='images/ajax-loader.gif' alt='loading...' />"; 
     var urlparams; 

     if (options.action == 'gettasks') { 
      urlparams = "action=gettasks"; 
      urlparams += "&list="+options.list; 
     } 

     if (options.action == 'getlists') { 
      urlparams = "action=getlists"; 
     } 

     if (options.action == 'create') { 
      urlparams = "action=create&list="+options.list+"&title="+options.title; 
     } 

     if (options.action == 'update') { 
      urlparams = "action=update&list="+options.list+"&taskid="+options.task; 
     } 


     $.ajax({ 
      url: "include/tasks_handler.php?"+urlparams, 
      cache: false, 
      beforeSend: function() { 
       $this.html(ajax_load); 
      }, 
      success: function(html){ 
       $this.html(html); 
       if (options.action == 'update') { 
        $("#taskList").tasks(); 
       } 
      } 
     }); 

    }); 
    }; 
})(jQuery); 

回答

2

將它定義爲這樣的函數

$.myfunction = function(options){ 
    //method logic here 
}; 

//Use it here 
$.myfunction({title: blah}); 

但是這種方式無法使用jQuery鏈接之前,除非你從這個方法返回一個jQuery對象。

0

是的。只要像這樣做:

$.pluginName = function(/* arguments here */) { 
    // Plugin Code here 
} 
1

添加您的函數來jQuery對象本身,而不是jQuery.fn

例如

$.myfunction = function() { ... }; 
+0

我該如何在DOM和獨立模式下工作?我已將示例代碼添加到該問題中。 – FLX

0

你可以這樣定義它:

jQuery.myfunction = function(options) { 
    alert(options.title); 
}; 

並調用這樣的:

$.myfunction({title: 'foo bar'}); 
1

除了張貼在這裏其他的答案顯示你如何做各的方式,一個重要的這裏作出的區別是:你應該使用$命名空間還是$.fn命名空間?

如果您看到jQuery的內部方法,它們會作出以下區別。

  • $.fn用於對DOM元素
  • $操作被用於對對象(數組,集合,POJO等)操作,不具有DOM的存在的知識。
+0

我明白了,這就是爲什麼我要使它在兩種方式下工作,因爲我有時在DOM中使用它,有時是獨立的,它們並不相互排斥。 – FLX