如何为jQuery插件提供多个预设的默认选项?

如何为jQuery插件提供多个预设的默认选项?,jquery,plugins,options,Jquery,Plugins,Options,比如说,我有一个jquery插件,它带有默认选项,可以像任何插件一样被覆盖 我想做的是添加多个默认选项,这些选项可以通过选项或插件“触发器”中的某个地方调用。 问题是。。怎么做 Jsfiddle进一步解释了这一点: 这个插件如何工作与这个问题完全无关 基本上是这样的: if ( option == 'b' ) { var defaults = { width: '260', height: '120'

比如说,我有一个jquery插件,它带有默认选项,可以像任何插件一样被覆盖

我想做的是添加多个默认选项,这些选项可以通过选项或插件“触发器”中的某个地方调用。 问题是。。怎么做

Jsfiddle进一步解释了这一点:

这个插件如何工作与这个问题完全无关



基本上是这样的:

    if ( option == 'b' ) { 
         var defaults = {
            width: '260',
            height: '120'
        }; 
    }
    else {
        var defaults = {
            width: '60',
            height: '10'
        };
    }
<script type="text/javascript">
$(document).ready(function() {
    $('.boxes').b({
    option: 'b',
    width: '500'
    });
}); 
</script>
然后在选项中调用它,如下所示:

    if ( option == 'b' ) { 
         var defaults = {
            width: '260',
            height: '120'
        }; 
    }
    else {
        var defaults = {
            width: '60',
            height: '10'
        };
    }
<script type="text/javascript">
$(document).ready(function() {
    $('.boxes').b({
    option: 'b',
    width: '500'
    });
}); 
</script>

$(文档).ready(函数(){
$('.box').b({
选项:“b”,
宽度:“500”
});
}); 


进一步阐述:

这是可行的,但不是我想要的:

(在js中)

========

这不起作用,或多或少是我想要的:

(以html格式)

…我说“或多或少”的原因是。。好吧,它不起作用,我也不在乎如何调用它,只要它在
标记内的插件触发代码中,并且很简单。

移动到插件:

然后:

$('.boxes').b({
option: "b",
width: '500'
});

否则,为什么不在插件内部执行呢

或者你可以像这样做一个数组

var options = {
                a:{ width: '100', height:'100' },
                b: { width: '100', height:'100' }
            };

$('.boxes').b({options["a"]});

这是回答你的评论而不是你的问题

   obj =  {
       a : {
          width: '100',
          height: '100'
       },
       b : {
          width: '200',
          height: '200'
       },
    }
//obj.a.width >>>> 100
//obj.b.width >>>> 200

至于您的问题,jquery已经为您做了这件事,要用回调中提供的选项覆盖默认选项

如果你想让多个选项再次覆盖它,这是愚蠢的,因为谁会想覆盖他们在同一回拨中已经覆盖的东西

更新

这是你最后的选择

obj = {
    options : {
         option_a : {width: '',height:''},
         option_b : {width: '',height:''}
    },
    use_option: 'b'
}

$('.boxes').b(obj);

通过这种方式,您可以在小部件/扩展插件中控制它

为什么不使用对象数组?@Val您告诉我。。(我问这个问题是因为我不知道该怎么做,不仅仅是为了交谈。)我不想用另一组默认选项或类似的东西覆盖默认选项。我希望有一组默认选项可以从触发器代码调用为活动的(这意味着一次只有一组选项处于活动状态)。除此之外,我希望能像平常一样,超越那些。。我之所以提到这一点,是因为我不想要一个不允许我这样做的解决方案。在问题的底部添加了更多的说明。我能看到这一点的唯一方法是使用一个全局变量,并在
$('.box').b({…})之前分配它或将其指定给对象中的放置选项,作为同级,您将拥有要使用的选项。。。。看编辑后的答案…我需要调用插件触发代码中的特定选项。这意味着触发插件的代码(在标签中)在问题的底部添加了更多的说明。好的,我将不得不测试这个。。因为我开始更深地陷入绝望,认为这是不可行的,因为似乎没有什么事情能按我想要的方式工作,但这似乎确实做到了我想要的,以及我最初认为它应该如何工作。是的,它似乎确实起了作用。我只是处于一种震惊的状态,因为它是如此的简单,而且正是我想象它是如何工作的。。从上周二开始,我就一直在尝试这样做:D我去接受它。:)
obj = {
    options : {
         option_a : {width: '',height:''},
         option_b : {width: '',height:''}
    },
    use_option: 'b'
}

$('.boxes').b(obj);