例如,我有jquery插件,我用一些像这样的atrributes调用一个init方法:
jQuery(document).ready(function($) {
$('#someid').somePlugin({
animation : 'fadeIn',
speed : '1000',
easing : 'swing'
});
});
让我假装我在页面上也有html链接。是否有可能以某种方式通过点击例如html链接来更改此插件的init函数的属性值?
因此,通过单击我想要更改的链接,例如没有页面刷新的速度属性。如果可能,实施此操作的最佳方法是什么?
或许我应该先在插件的代码中更改一些内容。 插件的代码:
(function($) {
$.fn.extend({
somePlugin: function(options) {
var defaults = {
speed : 500,
animation : 'fadeIn',
easing : false
}
var options = $.extend(defaults, options);
var speed = options.speed;
var easing = options.easing;
var animation = options.animation;
return this.each(function() {
var obj = $(this);
//some action here
});
}
});
})(jQuery);
答案 0 :(得分:-1)
是的,你可以这样做:
$('#someid').somePlugin('option', 'animation', 5000);
此外,您可以通过以下方式一次更改多个选项:
$('#someid').somePlugin('option', {animation: 5000, otherOption: 'blah'});
我应该提到这只适用于某些,如果您正在使用"官方" jQuery插件。很多插件作者都坚持这种设计模式,但并非所有人都这样做。此外,如果您使用jQuery UI Widget Factory开发插件,则可以免费获得此功能。
(function( $ ){
var methods = {
init : function( options ) {
//Extend options here with your
//defaults and init your plugin
},
option: function( key, value ){
options[key] = value;
}
};
$.fn.somePlugin = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
//some error that method doesnt exist
}
};
})( jQuery );
$('div').somePlugin({someOption: true});
//..later
$('div').somePlugin('option', 'someOption', false);