ホームページ  >  記事  >  ウェブフロントエンド  >  jQuery_jqueryのバインドされたイベントの名前空間の詳細説明

jQuery_jqueryのバインドされたイベントの名前空間の詳細説明

WBOY
WBOYオリジナル
2016-05-16 18:08:42931ブラウズ

この記事を読むまで、バインドにも名前空間があるとは知りませんでした。実際、この記事を読んだ後、もう一度マニュアルに目を通したところ、いくつかの注意事項を見つけました。しかし、マニュアルではたった 1 文ですべてが解決されます。あまり詳しくは述べませんが、おそらく彼は、名前空間は非常に単純であり、これ以上説明する必要はないと考えているのでしょうか。

まずマニュアルをお読みください。bind メソッドには 3 つのパラメータ (type、[data]、fn) があるため、マニュアルでは次のように説明されています。

.bind() メソッドを使用して追加します。ドキュメントのメイン動作モードに。フォーカス、マウスオーバー、サイズ変更などのすべての JavaScript イベント オブジェクトを type パラメーターとして渡すことができます。

jQuery は、.bind('click') を簡素化する .click() など、これらの標準イベント タイプをバインドする簡単な方法もいくつか提供します。合計は次のとおりです:ブラー、フォーカス、フォーカスイン、フォーカスアウト、ロード、サイズ変更、スクロール、アンロード、クリック、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、change、select、submit、keydown、キープレス、キーアップ、エラー。

type パラメーターとして使用される文字列はどれも有効です。文字列がネイティブ JavaScript イベント名でない場合、イベント ハンドラーはカスタム イベントにバインドされます。これらのカスタム イベントはブラウザーによってトリガーされることはありませんが、.trigger() または .triggerHandler() を使用して他のコードで手動でトリガーすることができます。

type パラメータの文字列にドット (.) 文字が含まれている場合、このイベントには名前空間があるとみなされます。このドット文字は、イベントを名前空間から分離するために使用されます。たとえば、 .bind('click.name', handler) が実行される場合、文字列内の click がイベント タイプとなり、文字列内の name が名前空間になります。名前空間を使用すると、他のイベントをトリガーせずに、特定の種類のイベントのバインドを解除したり、トリガーしたりすることができます。詳細については、unbind() を参照してください。

イベントが要素に渡されると、そのイベントに対してバインドされているすべてのハンドラーがトリガーされます。複数のイベント ハンドラーが登録されている場合、それらは常にバインドの順序でトリガーされます。すべてのバインドされたイベント処理関数が実行された後、イベントは通常のイベント バブリング パスに沿って上昇し続けます。



jQuery のバインド / アンバインド メソッドは非常に簡単に使用できるため、ほとんどの場合は使用されない可能性があります。代わりに、クリック / キーダウンなどのイベント名スタイルを直接使用してください。イベントバインディング操作を実行するメソッド。

ただし、次の状況を想定します。ユーザー インタラクションの結果に基づいて、実行時にさまざまなクリック イベント処理ロジックをバインドする必要があるため、理論上、特定のイベントはバインド/バインド解除操作を無数に繰り返すことになります。ただし、バインドを解除するときに、他の場所で利用できる同じイベントの追加のバインド ロジックがすべて解放されるのではなく、自分に関連付けられた処理ロジックだけが解放されることを願っています。

このとき、.click() / .bind('click') と .unbind('click') を直接使用して繰り返しバインドを実行すると、バインドされているすべての要素のバインドが解除されます。この要素に対する他のサードパーティの動作に影響を与える可能性があります。もちろん、関数変数がバインド中に明示的に定義されている場合は、バインド解除中に 2 番目のパラメーターとして function を指定して、バインドを解除する処理ロジックの 1 つだけを指定できます。ただし、実際のアプリケーションでは、さまざまな匿名関数バインディングが発生する可能性があります。決定された状況。

この問題に対する jQuery の解決策は、イベント バインディング名前空間を使用することです。つまり、イベント名の後に .something を追加して、動作のこの部分の論理範囲を区別します。

たとえば、 .bind('click.myCustomRoutine',function(){...}) を使用して、匿名関数をクリック イベントにバインドすることもできます (独自の名前空間を使用してさまざまな時間をバインドできます)複数回の動作メソッド)、バインドを解除するときに、.unbind('click.myCustomRoutine') を使用して、.bind('click') またはその他の方法で他のクリック イベントを解放せずに、.myCustomRoutine 名前空間にバインドされているすべてのクリック イベントを解放します。名前空間に。

同時に、コマンド スペースを使用すると、.unbind('.myCustomRoutine') を通じて、この名前空間にあるすべてのカスタム イベント バインドを一度にバインド解除することもできます。

jQuery の名前空間はマルチレベル空間をサポートしていないことに注意してください。 jQuery では、 .unbind('click.myCustomRoutine.myCustomSubone') を使用すると、名前空間が myCustomRoutine と myCustomSubone である 2 つの並列名前空間の下にあるすべてのクリック イベントがブロック解除されますが、「myCustomRoutine」の下の myCustomSubone サブスペースはブロックされないためです。

jQuery のバインド / アンバインド メソッドは非常に簡単に使用できるため、ほとんどの場合は使用されませんが、代わりに、クリック / キーダウン操作などのイベント名スタイルのメソッドを使用してイベント バインドが直接行われます。

しかし、次の状況を想定します。ユーザー操作の結果に基づいて、実行時にさまざまなクリック イベント処理ロジックをバインドする必要があるため、理論的には、特定のイベントに対してバインド/バインド解除操作が無数に実行されることになります。ただし、バインドを解除するときに、他の場所で利用できる同じイベントの追加のバインド ロジックがすべて解放されるのではなく、自分に関連付けられた処理ロジックだけが解放されることを願っています。

このとき、.click() / .bind('click') と .unbind('click') を直接使用して繰り返しバインドを実行すると、バインドされているすべての要素のバインドが解除されます。この要素に対する他のサードパーティの動作に影響を与える可能性があります。もちろん、関数変数がバインド中に明示的に定義されている場合は、バインド解除中に 2 番目のパラメーターとして function を指定して、バインドを解除する処理ロジックの 1 つだけを指定できます。ただし、実際のアプリケーションでは、さまざまな匿名関数バインディングが発生する可能性があります。決定された状況。

この問題に対する jQuery の解決策は、イベント バインディング名前空間を使用することです。つまり、イベント名の後に .something を追加して、動作のこの部分の論理範囲を区別します。

たとえば、 .bind('click.myCustomRoutine',function(){...}) を使用して、匿名関数をクリック イベントにバインドすることもできます (独自の名前空間を使用してさまざまな時間をバインドできます)複数回の動作メソッド)、バインドを解除するときに、.unbind('click.myCustomRoutine') を使用して、.bind('click') またはその他の方法で他のクリック イベントを解放せずに、.myCustomRoutine 名前空間にバインドされているすべてのクリック イベントを解放します。名前空間に。

同時に、コマンド スペースを使用すると、.unbind('.myCustomRoutine') を通じて、この名前空間にあるすべてのカスタム イベント バインドを一度にバインド解除することもできます。

jQuery の名前空間はマルチレベル空間をサポートしていないことに注意してください。 jQuery では、 .unbind('click.myCustomRoutine.myCustomSubone') を使用すると、名前空間が myCustomRoutine と myCustomSubone である 2 つの並列名前空間の下にあるすべてのクリック イベントがブロック解除されますが、「myCustomRoutine」の下の myCustomSubone サブスペースはブロックされないためです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。