1

これを行うとどうなりますか:

$('#elementID').delegate('.findclick a', 'click', function()
{
   alert("test");
}

そして最初に:

#elementIDドキュメントに存在しません

また

#elementID存在.findclick aしますが、存在しません。

本当に悪いですか?それともまったく関係ありませんか?

4

4 に答える 4

0

トリガーしない...だから問題ない。

これらの要素を( を使用して)動的に追加する.on()と、トリガーされて機能します。


例:

$(document).on('click', 'a.delegatedElementThatDoNotExistYet', function() {
    alert("Welcome");
});

委任された要素が存在しないため何も起こりませんが、

setTimeout(function() {
   $('body').html('<a class="delegatedElementThatDoNotExistYet">Hello!</a>');
},5000);

数秒後 (私の例では 5 秒) にデリゲートされた要素を追加すると、アラートが発生します。

JsFiddleの例

于 2013-01-24T16:51:50.580 に答える
0
  • リスナーを存在しないノードにアタッチしないため、最初のケースはそれほど悪くありません。
  • ある時点であなた.findclick a の子供がいる場合、2番目は悪くなる可能性があり#elementIDます。

function(){
   alert("test");
}

これらのアンカーをクリックするたびにトリガーされます。

ポイントは、リスナーを親にバインドし、子を処理することです

于 2013-01-24T16:51:58.983 に答える
0

が存在しない場合#elementID、何も起こりません。要素が存在しないため、イベント ハンドラーをバインドできません。

存在する場合は、おめでとうございます。これで、イベント デリゲーション#elementIDが設定されました。簡単に言うと、イベント デリゲーションは、まだ存在していないが、ページが読み込まれた後のある時点で存在する要素にイベント ハンドラーを設定する手法です。

2 番目の状況は、まさに がどのように使用されることを意図.delegate()しているかです。

于 2013-01-24T16:52:24.320 に答える
0

#elementIDドキュメントに存在しません

関数が作成され、デリゲート (空) として結果セットに適用されます。そのため、何も起こりません (作成された関数は最終的にガベージ コレクションを取得します)。

#elementID存在.findclick aしますが、存在しません。

ここでも関数が作成され、デリゲートとして結果セットに適用されます ( 1 つの要素のみを含む必要があります)。

#elementIDこれで、その中の任意の要素がクリックされるたびに、jQuery は登録されたデリゲート (1 つだけである必要があります) を反復処理して、一致するセレクター ( '.findclick a') を見つけます。

後で.findclick aその下に作成#elementIDすると、クリックすると関数の実行が開始されます。

于 2013-01-24T17:00:46.553 に答える