2012-04-24 13 views
0

はこれに対する簡単な解決策があるかどうか、私は疑問に思って: 私は、次のjQueryプラグインを持ってグリッドに定義された要素に数回作成し複数のjQueryプラグイン

(function ($) { 
    $.fn.MyPlugin = function() { 

     $(this).mouseenter(function() { 
      //do something for single plugin instance 
     }); 
    }; 

})(jQuery); 

しかし、どのように私は行くことができますどのプラグインインスタンスが私がマウス入力機能をトリガーしているかを一意に特定することについて。現在の設定では、すべてのインスタンスを参照していますが、そのときにマウスのいずれかを起動するだけです。

プラグインは次のように作成されます。

$(".someClass").MyPlugin(); 
+0

あなたは*作成されたプラグイン*を何回も持っていますか?または、複数の要素に同じプラグインが添付されていますか? – mgnoonan

+0

私は編集を追加しました – TGH

答えて

2

あなたはそれはそれはと呼ばれる理由です、プラグインをみとめ回を作成する必要はありませんプラグインのコーディングを開始する方法については、jquery plugins authoring pageをご覧ください。

$(this)のコードはthisが既にjQueryオブジェクトであるため、冗長です。次に、プラグインで連鎖性を維持するために、常にreturn thisとしたいと考えています。 mousenterイベント内の$(this)を使用すると、DOM内のプラグインによって処理されている現在の要素を参照できます。

時にはreturn this.each()にも役立ち、各要素をループして何かします。この場合、イベントを添付しているので、イベントはアイテムのコレクション内のすべてのアイテムに作用するので役立たない。この場合には、thisあなたは、プラグインと呼ばれているコレクションを参照:

$.fn.MyPlugin = function() { 

    return this.mouseenter(function() { 
     $(this).something(); 
     //do something for single plugin instance 
    }); 

}; 

そうのような、あなたはプラグインを呼びたい:

$('elements').MyPlugin(); 

ちょうど要素(複数可)にプラグインを呼び出しますそれらの要素にはmouseenterイベントが添付されます。

+0

Brilliant :-)ありがとう – TGH

1

あなたがプラグインを使用しているHTMLは何ですか? mouseenterは要素IDに接続できるので、(this).mouseenterを呼び出すのではなく、id(つまり$( "div.somediv"))でdivを呼び出します。 ....}

jQueryのサイトでは、ネストされたdivのために複数のマウスイベントの使用例を示します。

http://api.jquery.com/mouseenter/