-1

私はデリゲートが非常に便利であることを発見しましたが、ドキュメントを読んだ後でも、まだ何かについて混乱しています。

以前は、すべてのイベントを次のようにバインドしていました。

$("#myTextBox").on("input", control.Search);

今、私は次のようなドキュメントに従ってそれをやっています:

$("#myDiv").delegate("#myTextBox", "input", control.Search);

デリゲートが 2 つのセレクターを使用するのはなぜですか? それだけではない理由:

$("#myTextBox").delegate("input", control.Search);
4

4 に答える 4

2

最初のセレクターは「ルート」または「ベース」要素として使用する要素で、2 番目のセレクターはイベント ハンドラーをアタッチする要素です。その目的は、イベント ハンドラーを下位レベルの要素 (下位レベルとは DOM のさらに下の要素を意味します) にアタッチできるようにすることですが、それを上位レベルで処理できるようにすることです。その有用性は、行または何かを削除するためのボタンを持つ一連の行を追加する TABLE のように、動的 DOM がある場合です。

on()メソッドを使用して同じ取引を実行することもできます。

于 2013-09-10T12:34:07.703 に答える
1

jQuery docs .delegateから:

ルート要素の特定のセットに基づいて、現在または将来、セレクターに一致するすべての要素の 1 つ以上のイベントにハンドラーをアタッチします。

.on は、 .onが呼び出されたときに存在する要素のイベントにのみバインドします。

選択した要素に 1 つ以上のイベントのイベント ハンドラー関数をアタッチします。

ドキュメントによると、次のことにも注意してください。

jQuery 1.7 の時点で、.delegate() は .on() メソッドに取って代わられました。

于 2013-09-10T12:32:04.303 に答える
0

JQuery のドキュメントで詳しく説明されています: http://api.jquery.com/delegate/ また、委任は JQuery 1.7 以降非推奨です。

于 2013-09-10T12:32:49.643 に答える
0

.delegate()は、イベント委任を使用してイベント ハンドラーを登録するために使用されます...

通常のイベント登録を使用すると、登録コードの実行時に dom に存在する要素のみにハンドラが登録されます。動的に追加された要素を処理する必要がある場合、このアプローチは実行できない場合があります。

イベント委任モデルでは、ハンドラーは祖先要素に登録されます。これは、ソース要素を除外するセレクターでページが読み込まれるときに存在します。これはイベント伝播を利用します - 要素で発生したイベントはすべての祖先要素に伝播されます (フォーカス イベントのようないくつかの例外があります)。したがって、要素で発生したイベントは、そのうちの 1 つの祖先要素に伝達され、ハンドラーが登録され、次にイベント ソース要素 (event.target) とその祖先が、2 番目のパラメーターとして渡されたセレクターと照合されます。ハンドラが実行されます。 http://api.jquery.com/on/#direct-and-delegated-events

したがって、 の場合、メソッドが呼び出されるdelegate()要素のセットにイベント ハンドラーが追加されます。また、イベントがその子孫から要素にバブリングすると、セレクターを使用してイベントのハンドラーを実行するかどうかが決定されます。delegate()input

于 2013-09-10T12:36:57.013 に答える