非同期にロードし、ページのロード時にイベントを DOM 要素にアタッチする jQuery プラグインがあります。
DOM 要素がプラグインからのイベントに関連付けられないことがあります - これは、別の JavaScript ファイルを介してこれらの DOM 要素をロードするために発生します。
イベント ハンドラーが常に DOM 要素に関連付けられるようにする方法はありますか?
非同期にロードし、ページのロード時にイベントを DOM 要素にアタッチする jQuery プラグインがあります。
DOM 要素がプラグインからのイベントに関連付けられないことがあります - これは、別の JavaScript ファイルを介してこれらの DOM 要素をロードするために発生します。
イベント ハンドラーが常に DOM 要素に関連付けられるようにする方法はありますか?
ここでの主な答えは、プラグインを作成している場合、ページの読み込み時(またはその他の時点)にプラグインを適切な要素にアタッチすることは問題ではないということです。これは、プラグインのユーザーが行うことです。問題のドメインにはありません。
しかし、あなたがそれを処理しようとするなら:
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
私は明快さを好みます。
しかし、繰り返しますが、それは実際にはあなたの問題ではありません。プラグインをいつ、どこで接続するかは、プラグインのユーザー次第です。