2014-02-21 42 views
1

我有以下jquery插件代碼,我在其上工作,但它給了我Uncaught TypeError: Cannot read property 'retValue' of undefined。以下是我的代碼在jQuery插件中獲取未定義錯誤的屬性'retValue'

(function ($) { 
    var Plugin = { 
     init: function (options, elem) { 
      var self = this; 
      self.elem = elem; 
      self.$elem = $(elem); 

      this.search = (typeof options === 'string') ? options:options.retValue; 
      this.options = $.extend({}, $.fn.plugin.options, options); 
     } 
    }; 

    $.fn.plugin = function (options) { 
     return this.each(function() { 
      var plugin = Object.create(Plugin); 
      plugin.init(options, this); 
     }); 
    }; 

    $.fn.plugin.options = { 
     retValue: 'value', 
    }; 
})(jQuery); 

$('#selector').plugin(); 

這裏我沒有在邊界()中傳遞參數。所以我想讓我的插件獲得默認的retValue,但它給了我上面的錯誤。我該如何解決這個問題?

UPDATE

我想在3名以下的方法來使用這個插件。

$('#selector').plugin(); // does not work 
$('#selector').plugin('string'); // works 
$('#selector').plugin({key1: 'value1', key2: 'value2'}); // works 

我該如何做第一個工作?

+0

任何人誰可以幫我? – 2619

回答

0

你可以做到這extend設置:

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

這將會被自動合併設置,並使用默認值填充它,如果沒有通過。

var Border = { 
    init: function (options, elem) { 
     var self = this; 
     self.elem = elem; 
     self.$elem = $(elem); 
     self.options = $.extend({}, $.fn.border.options, options); 
     alert(self.options.retValue); 
    } 
}; 

,並調用插件有類似的選項:

$('#foo').border({ retValue : "abc" }); 

或者

$('#foo').border(); 
+0

我已經在我的代碼中使用了擴展。你的代碼和我的代碼有什麼區別? – 2619

+0

你正在使用var'options'來設置錯誤的搜索方式。現在我使用'extend'的結果。如果你嘗試這個代碼。它會工作。 – Niels

+0

你可以看看這裏http://jsfiddle.net/p4Xkn/。我仍然收到同樣的錯誤。 – 2619

相關問題