-2

非同期にロードし、ページのロード時にイベントを DOM 要素にアタッチする jQuery プラグインがあります。

DOM 要素がプラグインからのイベントに関連付けられないことがあります - これは、別の JavaScript ファイルを介してこれらの DOM 要素をロードするために発生します。

イベント ハンドラーが常に DOM 要素に関連付けられるようにする方法はありますか?

4

2 に答える 2

1

ここでの主な答えは、プラグインを作成している場合、ページの読み込み時(またはその他の時点)にプラグインを適切な要素にアタッチすることは問題ではないということです。これは、プラグインのユーザーが行うことです。問題のドメインにはありません。

しかし、あなたがそれを処理しようとするなら:

readyショートカットとして(関数をに渡すだけ) jQueryハンドラーを使用して、ページが完全に読み込まれるようにすることができますjQuery。例:

jQuery(function($) {
    // ...here, all page elements defined by the main HTML have been created
});

ページが完全にロードされた後に追加される要素を処理する必要がある場合は、イベント委任の使用を検討してください。ここで、イベントが発生したときに、要素自体ではなく、それらの祖先要素でイベントを処理します。たとえば、これは、要素の近くにアタッチされたハンドラーによってイベントがキャンセルされない限り、clickクラスを持つ要素のすべてのイベントを処理します。foo

$(document.body).delegate(".foo", "click", function() {
    // An element matching ".foo" was clicked
});

呼び出す要素(この場合は)にイベントをdelegateフックしdocument.bodyますが、実際のクリックが実際に発生した要素からその親までの祖先パスに一致する要素がある場合にのみ、ハンドラーをトリガーします、その親に、というように、あなたが呼び出した要素まで続きますdelegate

最近のバージョンのjQueryでは、ハイパーオーバーロードon関数を使用して同じことを行うこともできます(引数の順序が異なることに注意してください)。

$(document.body).on("click", ".foo", function() {
    // An element matching ".foo" was clicked
});

delegate私は明快さを好みます。

しかし、繰り返しますが、それは実際にはあなたの問題ではありません。プラグインをいつ、どこで接続するかは、プラグインのユーザー次第です。

于 2013-01-03T21:29:32.320 に答える
0

プラグイン (あなたのもの) からのイベントは委任する必要があります。

デリゲートに関するjQueryのドキュメントを見てください。

具体的には、存在し、常に存在する dom 要素 (非同期に読み込まれたデータのコンテンツを受け取る dom 要素) にイベントをバインドし、リッスンする具体的な要素に一致するセレクターを指定します。

jQuery('#my_container_for_ajax')
    .on ('click', '.my_future .elements .tolisten', function () {});
于 2013-01-03T21:27:40.927 に答える