0

私のページで次の 3 つのステートメントを検討してください。要素 #not_ajax_element および #ajax_element はボタンです。要素 #ajax_element は、以前の ajax 呼び出し (表示されていません) によってページに読み込まれます。

// #not_ajax is 'static' element. THIS WORKS
$("#not_ajax_element").on("click", "button", function() {
   alert('Not ajax');
});

// #ajax_element is loaded by a previous ajax call. THIS DOES NOT WORK.
$("#ajax_element").on("click", "button", function() {
   alert('Not ajax');
});

// #ajax_element is loaded by a previous ajax call. THIS WORKS.    
$(document).on("click", "#ajax_element", function () {
   alert('Not ajax');
});

コメントで判断できるように、 on() 構文は静的要素と動的要素で異なるようです。

これは文書化された動作ですか、それとも実装で重要な何かが欠けていますか?

4

2 に答える 2

3

コンテキスト要素 (選択して呼び出す要素.on) は、コードの実行時に存在する必要があります。これは簡単に実行できるルールです。表示されている動作は想定されており、文書化されています。document常に存在し、動的要素が常に存在するとは限りません。

2 番目のサンプルは、そのコードを ajax 呼び出しの成功コールバックに適切に配置していれば機能するはずです。これは、その時点 (成功コールバック内) で ajax 追加要素が追加されているため、それを選択してコンテキストとして使用できることを意味します。

于 2013-01-15T19:40:19.273 に答える
1

#ajax_element とは正確には何ですか? それはボタンですか、それとも単なる div コンテナーですか? #ajax_element内のボタンの「クリック」イベントを監視しているため、2番目は機能しません。3 番目の方法は、document.body コンテキストのスコープ全体で「クリック」イベントをリッスンしているためです。適切なコンテキストまたはスコープでリッスンしていることを確認する必要があります。そうしないと、機能しません。

于 2013-01-15T19:48:08.180 に答える