0

私はjQueryプラグインを書いていますが、次のように複数の機能を利用できるようにしたかったのです:

//Calling the "constructor"
$(element).pluginName();

//Calling the "method"
$(element).pluginName.methodName();

だから私が基本的にやったことはこれでした:

(function($, window, document, undefined) {
    //The "constructor"
    $.fn.pluginName = function() {
        //try accessing $(this)
        var meh = $(this);
    };
    //The "method"
    $.fn.pluginName.methodName = function() {
        //try accessing $(this)
        var test = $(this);
    };
})(jQuery)

上記のボックスで説明したとおりに呼び出すと、「コンストラクター」に対して機能します。しかし、「メソッド」を試すと、エラーが発生します。

TypeError: document is null
http://(url)/jquery.js
safeFrag = document.createDocumentFragment();
Line 5823

ここで面白い部分に:「メソッド」の名前を に変更すると$.fn.pluginNameMethodName(基本的に、最後の を削除すると.)、 を呼び出すことで「メソッド」を呼び出すことができます$(element).pluginNameMethodName();

それで、私は何を間違っていますか?

プラグインに複数の簡単にアクセスできるメソッドを持たせたい (プラグインのメソッドを で呼び出させたくない$(element).pluginName(methodName);)。

4

1 に答える 1

1

簡単にアクセスできるメソッドが必要な場合は、要素に格納されたインターフェイスをプラグインで提供します。

(function($, window, document, undefined) {
    //The "constructor"
    $.fn.pluginName = function() {
        return this.each(function(){
            var obj = {
                elem: this,
                theMethod: function(){
                    var meh = this.elem;
                }
            };
            $(this).data("pluginName",obj);
        })
    };
})(jQuery)

// using it
var pluginInterface = $(theelement).pluginName().data("pluginName");
pluginInterface.theMethod();

でも、私$(element).pluginName(methodName);も簡単にアクセスできると思います。(さらに)。

于 2013-05-23T20:25:59.390 に答える