【问题标题】:How could I give jQuery plugin multiple pre-set default options?我怎样才能给 jQuery 插件多个预设的默认选项?
【发布时间】:2011-12-18 15:18:05
【问题描述】:

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

我想要做的是添加多个默认选项,这些选项可以通过选项或插件“触发器”中的某处调用。 问题是……如何?

Jsfiddle 进一步解释了它: http://jsfiddle.net/A7LMc/

这个插件的工作原理与问题完全无关。



基本上是这样的:

    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>


进一步阐述:

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

http://jsfiddle.net/A7LMc/1/(在js中)

========

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

http://jsfiddle.net/A7LMc/2/(在 html 中)

..我说“或多或少”的原因是因为.. 好吧,它不起作用,我真的不在乎如何调用它,只要它在插件触发代码中在&lt;script&gt; 标签内,很简单。

【问题讨论】:

  • 为什么不用对象数组?
  • @Val 你告诉我..(我问这个问题是因为我不知道该怎么做,而不仅仅是为了进行对话。)

标签: jquery plugins options


【解决方案1】:

移至插件:http://jsfiddle.net/A7LMc/3/

    if ( options.option == 'b' ) {
         var defaults = {
            width: '260',
            height: '120'
        };
    }
    else {
        var defaults = {
            width: '60',
            height: '10'
        };
    }

然后:

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

var optiondefault = "width:500";
var optiona = { width: 260, height: 120, optiondefault  }
var optionb = { width: 60, height: 10, optiondefault }

$('.boxes').b({optiona});

要不然为什么不在插件里面做呢?

或者你可以像这样把它做成一个数组......

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

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

【讨论】:

  • 我需要从插件触发代码中调用特定选项。意思是触发插件的代码(在
  • 在问题底部添加了更多说明。
  • 好吧,我将不得不对此进行测试......因为我开始陷入绝望,认为这是不可行的,因为似乎没有什么能按我想要的方式工作,但这似乎确实完全按照我的意愿去做,以及我最初认为它应该如何工作。
  • 是的,它似乎确实有效。我只是处于震惊的状态,因为它是如此简单,而且正是我设想它的工作方式......而且我从上周二开始就一直在尝试这样做:D 我会去接受它。 :)
【解决方案2】:

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

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

obj = {
  [
     { width: '100', height:'100' },
     { width: '200', height:'200' },
  ]
}

// obj.[0].width >>> 100
// obj.[1].width >>> 200

至于你的问题 jquery 已经为你做到了,用回调中提供的选项覆盖默认选项,

如果你想要多个选项再次覆盖它,那很愚蠢,因为谁想要覆盖他们已经在同一个回调中覆盖的东西......

更新

这是你最后的选择

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

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

这样你就可以在你的小部件/扩展插件中控制它

【讨论】:

  • 我不想用另一组默认选项或类似的东西覆盖默认选项。我希望有一组默认选项可以从触发代码中调用以使其处于活动状态(这意味着一组选项一次将处于活动状态)。除此之外,我想像往常一样覆盖那些。我之所以提到这一点是因为我不想要一个不允许我这样做的解决方案。
  • 在问题底部添加了更多说明。
  • 我可以看到这个工作的唯一方法是使用全局变量,并在 $('.boxes').b({...}); 之前分配它,或者将其分配给对象中的选项并作为兄弟姐妹使用哪个选项....查看编辑后的答案....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多