2014-02-21 44 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

相关问题