2013-05-27 66 views
-1

我想知道我可以如何收取第三方插件。例如,我想加載select2()插件,僅用於非觸摸式瀏覽器。充電一個jQuery插件

(function($){ 

    $.fn.mySelect2 = function(options) { 
     var $container = $(this); 
     var DEFAULTS = {}; 
     var options = $.extend(DEFAULTS, options); 

     return this.each(function(){ 
      // only loads the select2 plugin on non touch browsers 
      if(typeof(window.ontouchstart) != 'undefined') { 
       $('.select2').select2(options); 
      } 
     }); 
    } 
})(jQuery); 

希望能夠編寫如下:

$('.select2').mySelect2()     // inits the plugin 
$('.select2').mySelect2('destroy')   // destroys the plugin 
$('.select2').mySelect2({width: '220px'}); // inits the plugin with a rewritted option 

此前線適用於init和編輯選項,但不是方法(「破壞」,「只讀」,... )。

事實上,我想爲其他幾個插件/庫做同樣的事情,我不知道第三方插件的每種方法或屬性。

我該怎麼做?

回答

1

我認爲問題是,當你使用$.extend(DEFAULTS, options)而options是一個字符串時,你實際上將這個字符串轉換爲一個對象(給定字符串的字符數組)。

因此,您應該檢查選項變量的類型,並僅在缺省情況下將其擴展爲不是字符串。

此外,爲了能夠使用這個插件不僅爲'.select2',你應該通過$(this)

$.fn.mySelect2 = function(options) { 
    var $container = $(this); 
    var DEFAULTS = {}; 
    if (typeof options != "string") 
    options = $.extend(DEFAULTS, options); 

    return this.each(function(){ 
     // only loads the select2 plugin on non touch browsers 
     if(typeof(window.ontouchstart) != 'undefined') { 
      $(this).select2(options); 
     } 
    }); 
} 
+0

謝謝你,像你說的更換,這個問題從$ .extend來()。 – pbaron