0


たとえば、jqueryプラグインがあり、次のような属性を持つ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);
4

1 に答える 1

-1

はい、次のようにできます。

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

さらに、次の方法で複数のオプションを一度に変更できます。

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

これは、「公式」の jQuery プラグインを使用している場合にのみ確実に機能することに注意してください。多くのプラグイン作成者がこのデザイン パターンを順守していますが、すべてが順守しているわけではありません。また、jQuery UI Widget Factoryを使用してプラグインを開発すると、この機能を無料で利用できます。


編集: OP は独自のプラグインを作成しているため、カスタム プラグインを使用してこの機能を容易にする方法の例を示すことができます。jQuery プラグイン オーサリング ページから直接取得:

(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);
于 2013-02-08T22:27:35.777 に答える