【问题标题】:getting property 'retValue' of undefined error in jquery plugin在 jquery 插件中获取未定义错误的属性“retValue”
【发布时间】:2014-02-21 19:34:29
【问题描述】:

我有以下我正在处理的 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,但它给了我上面的错误。我该如何解决这个问题?

更新

我想通过以下三种方式使用这个插件。

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

我怎样才能使第一个工作?

【问题讨论】:

  • 谁能帮助我?

标签: jquery plugins jquery-plugins


【解决方案1】:

您可以对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();

【讨论】:

  • 我已经在我的代码中使用了扩展。你的代码和我的有什么区别?
  • 您正在使用 var options 以错误的方式设置 search。现在我正在使用extend 的结果。如果您尝试此代码。它会起作用的。
  • 你能看看这里jsfiddle.net/p4Xkn。我仍然遇到同样的错误。
  • 你必须删除这个:this.search = (typeof options === 'string') ? options:options.retValue; 因为options 是未定义的,而不是=== 到一个字符串。哪个会尝试返回options.retValue,因为optionsundefined,你会得到undefined 错误。
  • 按照你所说的,当我像$('#foo').border('new value'); 这样调用我的插件时,它仍然显示value 而不是new value
猜你喜欢
  • 2015-08-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 2016-06-28
  • 2018-05-31
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
相关资源
最近更新 更多