如何更改jquery插件的属性

时间:2013-02-08 22:25:50

标签: jquery jquery-plugins attributes


例如,我有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);

1 个答案:

答案 0 :(得分:-1)

是的,你可以这样做:

$('#someid').somePlugin('option', 'animation', 5000);

此外,您可以通过以下方式一次更改多个选项:

$('#someid').somePlugin('option', {animation: 5000, otherOption: 'blah'});

我应该提到这只适用于某些,如果您正在使用"官方" jQuery插件。很多插件作者都坚持这种设计模式,但并非所有人都这样做。此外,如果您使用jQuery UI Widget Factory开发插件,则可以免费获得此功能。


编辑:由于OP正在创作自己的插件,我们可以展示一个如何使用自定义插件来促进此功能的示例。直接来自jQuery plugin authoring page

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