0

カスタム チェックボックスとラジオ ボタン用の jQuery プラグインを作成しようとしています。

(function($)
{
    $.fn.checkboxRadio = function(options)
    {
        var defaults = some;
        ...

        return this.each(function()
        {
            var button = $(this);
            ...
        });
    }
})(jQuery);

今すぐ使える$('input').checkboxRadio(options);

checkのようなものを使用できるようにするために、現在のスコープを変更せずにメソッドを追加するにはどうすればよい$('input').checkboxRadio('check')ですか?

カスタム メソッドを処理し、プラグイン内でその名前を取得する方法は?

4

2 に答える 2

1

これが公式のjqueryプラグインガイドです。

関数のラッピングに関する部分はここにあります(「プラグインメソッド」)(例はツールチッププラグインになります):

(function( $ ){
  var methods = {
    init : function(options) { ... },
    show : function() { ... },
    hide : function() { ... },
    update : function(content) { ... }
  };

  $.fn.tooltip = 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 {
      $.error( 'Method ' +  method + ' does not exist on jQuery.tooltip' );
    }    
  };
})(jQuery);

[更新]methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ))ガイドの行を説明する:

$(selector).tooltip('update', 'hello')javascriptコードから呼び出す場合は、呼び出しの期間中、をに設定して、引数としてupdate渡すメソッドを呼び出すことになります。'hello'contentthis$(selector)

それがこの行が処理するものです:

  • がメソッドの場合method == 'update'methods[method]update
  • argumentsに等しくなり['update', 'hello']ます。メソッドに渡したい引数を取得するには、最初の要素を削除する必要があります。これはまさに何をするかですArray.prototype.slice.call(arguments, 1)
  • myFunc.apply(obj, argsArray)関数myFuncを呼び出し、引数として渡し、呼び出し中にargsArrayに設定thisobjます。

this.each(...)したがって、メソッド内で、セレクターのすべての項目を反復処理するために呼び出すことができます。例:

update: function(content) {
  this.each(function(){ $(this).data('tooltip.content', content); });
  return this;
}
于 2013-01-30T22:12:15.120 に答える
0

次のようにプラグイン メソッドを接続できます。

(function($) {
    $.fn.checkboxRadio = function(options) {
        var defaults = {
            check: 'check'
    }

        return this.each(function() {
            var o = options;
            var _this = $(this);

            if( o.check === 'check' ) {
                 _this.attr('checked','checked');
            }else if ( o.check === 'uncheck' ) {
                 _this.removeAttr('checked');
            }
        });
    }
})(jQuery);

ユーザードキュメントは、必要なもののようにする必要があります。$('input').checkboxRadio({check:'check'});

于 2013-01-30T22:09:04.170 に答える