Jquery 插件未将默认值与选项合并

标签 jquery jquery-plugins

我创建了自己的 jquery 插件。就这样设置了。

;(function ($)
{
    $.fn.bpeditor = function (options)
    {
        return this.each(function() 
        {
            // Merge passed options with defaults
            vars.options = $.extend({}, $.fn.bpeditor.defaults, options);

            alert(vars.options.test);
         }
     }

     var vars =
     {
         options: null
     };

     $.bpeditor.defaults =
     {
         user: 'a',
         dkey: 'b',
         side: 'c',
         test: 'd'
     };

})(jQuery);

我这样调用它:

$('div#canvas').bpeditor
({
    user: 'user1',
    dkey: 'dkey1'
});

如您所见,我传递了“user”和“dkey”选项,但没有传递“test”。测试有一个默认值,并且未在插件中设置。插件中的警报应显示 vars.options.test 的内容,该内容应填充 $.bpeditor.defaults 的内容,但它返回为未定义。

有人可以帮忙吗?

谢谢

最佳答案

您忘记了.fn。

$.fn.bpeditor.defaults = {
    ...
};

注意:公开默认选项以便可以在插件外部修改它们是不常见的。

对于它们来说,更常见的是只有插件可以访问的词法作用域变量。也无需在 .each 循环内重新创建选项变量 - 所有这些受影响的元素都应共享相同的选项状态:

(function($) {

    // only created once, shared between all instances
    var defaults = {
        ...
    };

    $.fn.bpeditor = function (options) {
        options = $.extend(true, {}, defaults, options);
        return this.each(function() {
            alert(vars.options.test);
        });
    };
})(jQuery);

$.extend() 行深度复制默认值,然后将提供的选项复制到一个新的空对象中,重新使用 options 变量 - 确保 defaults 对象保持不变,并且传递的对象不会被修改。

关于Jquery 插件未将默认值与选项合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13991197/

相关文章:

php - 如果浏览器是 IE,则更改文件扩展名

javascript - 如何仅在特定屏幕尺寸之前和之后运行此 jquery 代码?

Jquery 日期选择器 z-index 问题

jquery - 表单 checkValidity() 不标记失败的输入

jQuery 缩放 div 内容(嵌套 div)

javascript - Bootstrap 3 移动版不行

javascript - Tablesorter:无法单击标题中的下拉菜单

jquery - 在 jquery 中引用选择器比实际调用选择器更快吗?如果是这样,有多大区别?

javascript - 像 9gag.com 一样在屏幕上滚动多个侧边栏 div

javascript - 删除最后一个克隆元素