1

私は自分のプラグインを作成する方法を学んでおり、http://docs.jquery.com/Plugins/Authoringの記事を強くフォローしています。私が質問している特定の部分は、 http://docs.jquery.com/Plugins/Authoring#Eventsに示されているように要素にイベントを追加することに関連しています。

ライブデモはhttp://jsfiddle.net/bhcEk/に含まれています。これは基本的に同じですが、resizeイベントの代わりにclick()イベントをバインドし、1つの要素を除いて、特定のクラスのいくつかの要素にプラグインを適用します。

要素をクリックすると、(3)アラートが発生します。記事から抜粋した以下のスクリプトに見られるように、イベントはeach()ループ内に追加されるため、これは予想されることです。

編集。Yicks!でも私より悪いです。Windows要素が追加されるため、クリックするとすべての要素がトリガーされます。たぶん$(window)と$(this)を返すだけですか?

記事が間違っているように思われるので、一度だけ追加(および破棄して削除)する必要があります。しかし、記事を書いた人々は私よりもはるかに経験豊富であり、私が彼らを疑うのは愚かなことかもしれません。記事は間違っていますか、それとも私ですか?

init : function( options ) {
 return this.each(function(){
  $(window).bind('resize.tooltip', methods.reposition);
});
4

2 に答える 2

0

プラグイン インスタンスと記事の違いは、その要素の同時イベントが$(window)1 つだけであることです。この記事では、メソッドが起動resize()するときの基準としてこれを使用します。reposition()

あなたのインスタンスには、3 つ.tooltipの要素があります。3 つの要素を返し、にバインドする関数を.each()コールバックすることで、実際に各要素のイベントを発生させます。 click$(window)

にバインドする代わりに$(window)、バインドし$(this)ます (イベントを現在のターゲット (クリックされた ) にバインドするだけ.tooltipです)。

これは、私が言及した1つの変更を加えたオリジナルのフィドルです。

于 2012-10-26T14:29:40.873 に答える
0

記事は問題ないようです。あなたの Fiddle では、望ましい動作が異なるため、それが適用されるコンテキストも異なる必要があります-thisより適切であると仮定するのは正しいです。

あまりにも長い間画面を見つめていたようですね ;-)

編集(コメントへの応答):

jQuery のほとんどすべては、競合を避けるためにカプセル化されています。混乱を招く恐れがありますが、「バインド」は fifo スタック (先入れ先出し配列) のようなものです。

この記事の例では、お互いを認識していない (そしてその必要がない) 複数の個々の要素に動作を適用しています。それらは共通のイベントを共有しているだけです。イベントは、実際にはウィンドウのイベント スタックに複数のハンドラーを追加しています。

おそらく簡略化された疑似上:

window.events [ // array [ event, namespace, function ]
  [ 'resize', 'tooltip', function(){ /* specific to element 1 */ }],
  [ 'resize', 'tooltip', function(){ /* specific to element 2 */ }],
  [ 'resize', 'tooltip', function(){ /* specific to element 3 */ }]
]

ウィンドウのサイズ変更イベントがトリガーされると、スタック内の各関数が順番に実行されます。「tooltip」名前空間は特定のイベント ハンドラーを参照するのではなく、最終的に互いに独立している同様のハンドラーのグループの名前です。

言葉で表現するのは難しいので、それが理にかなっていることを願っています。

于 2012-10-26T14:29:17.660 に答える