在我的插件中,我想提供完整的css控件。但必须声明一些初始值。为了让用户自定义这个初始值,我正在调用$ .extend变量,在该变量中我传递了所有的inilial css。
当我尝试覆盖该对象的一个或多个部分时,它将覆盖一切而不仅仅是选择的内容。为什么呢?
我让我有点小提琴http://jsfiddle.net/Hfk79/更清楚:
让我们假装这是我的插件:
$.fn.myPlugin = function( options ) {
var defaults = $.extend({
pCSS : {
color: 'red',
margin: '1em'
}
}, options );
var settings = $.extend( true, {}, defaults, options );
return this.click(function() {
$( this ).css( settings.pCSS );
});
}
用户现在可以覆盖默认选项。 让我们假装我是一个讨厌红色的用户,只想让它变成蓝色,我对其他属性感觉还可以。我会调用传递此选项的函数:
$( document ).ready(function() {
$( '.plugin' ).myPlugin({
pCSS: {
color: 'blue'
}
});
});
然而,这段代码会覆盖一切,而不仅仅是颜色!
我在哪里做错了?
答案 0 :(得分:2)
删除第一个extend
并删除pCSS
内部对象有助于:
$.fn.myPlugin = function (options) {
var defaults = {
color: 'red',
margin: '1em'
};
var settings = $.extend(true, defaults, options);
return this.click(function () {
$(this).css(settings.pCSS);
});
}
$(document).ready(function () {
$('.plugin').myPlugin({
color: 'blue'
});
});