我有以下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
如何让第一个工作?
答案 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();