我怎么能给jQuery插件多个预先设置的默认选项?

时间:2011-10-31 10:21:56

标签: jquery plugins options

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

我想要做的是添加多个默认选项,可以通过选项或插件“trigger”中的某个位置调用。 问题是......怎么样?

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中)

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

2 个答案:

答案 0 :(得分:2)

已移至插件: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"]});

答案 1 :(得分:0)

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

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

OR

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);

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