0

オプション(1)が機能しない理由がわかりません。私はライブを読んだことがありますが、見逃した/答えが見つかりませんでした.

誰かがこれを説明するか、これに関するドキュメントを教えてもらえますか?

1. $('#MAIN a[href="#PAGE"]').on( 'click',function(event){ alert("1"); });
2. $(document).on('click', '#MAIN a[href="#PAGE"]', function(event){ alert("2"); });

ありがとう。

4

2 に答える 2

2

最初のフォームはリンクに通常のイベントをフックし、2 番目のフォームはドキュメント レベルでデリゲート イベントをフックします。

最初のものは次と同じです:

$('#MAIN a[href="#PAGE"]').click(function(event){ alert("1"); });

最初のフォームには、コードを実行するときにリンクが存在する必要があります。後で追加するリンクのイベントは表示されません。

2 番目のフォームは、ドキュメント レベルまでバブルアップしたときにイベントをキャッチするため、後で追加するリンクに対しても機能します。

できれば、デリゲート イベントをターゲット要素のできるだけ近くに接続する必要があります。接続したときに要素が存在する場合#MAINは、ドキュメントの代わりにそれを使用します。

$('#MAIN').on('click', 'a[href="#PAGE"]', function(event){ alert("2"); });
于 2012-07-01T05:58:22.657 に答える
0

HTML とスクリプトの実行情報がなければ、これが問題であるかどうかを判断するのは困難ですが、最初のものは、セレクターに一致する要素 (この場合は 1 つの要素) を検索し、それにイベント ハンドラーをアタッチします。

2 番目のケースでは、イベント ハンドラーをドキュメントにアタッチします。クリック イベントが発生するたびに、イベント ターゲットがセレクターと一致するかどうかをテストし、一致する場合はイベントを発生させます。これが、事前にイベントを設定して要素を動的に作成できる理由です... ただし、そうするとパフォーマンスが低下します。

于 2012-07-01T05:34:58.163 に答える