在jquery插件中获取未定义错误的属性'retValue'

时间:2014-02-21 19:34:30

标签: jquery plugins jquery-plugins

我有以下jquery插件代码,我正在处理它,但它给了我Uncaught TypeError: Cannot read property 'retValue' of undefined。以下是我的代码

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

这里我在border()中没有传递任何参数。所以我希望我的插件获得默认的retValue,但它给了我上面的错误。我该如何解决这个问题?

更新

我想以下列3种方式使用此插件。

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

如何让第一个工作?

1 个答案:

答案 0 :(得分: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();