ページ上のすべての選択ボックスをループし、.hover
イベントをそれらにバインドして、マウスのオン/オフで幅を変更するコードがあります。調整。
私が抱えている問題は、最初のループの後に Ajax または DOM 経由で追加された選択ボックスにはイベントがバインドされないことです。
このプラグイン (jQuery Live Query Plugin) を見つけましたが、プラグインを使用してページにさらに 5,000 を追加する前に、jQuery を直接使用するか、他のオプションを使用して、その方法を知っている人がいるかどうかを確認したいと思いました。 。
P粉8645949652024-03-26 12:09:12
jQuery.fn.on
のドキュメントに詳しい説明があります。
したがって、以下の例では、コードを生成する前に
#dataTable tbody tr が存在している必要があります。
リーリー
新しい HTML がページに挿入される場合は、以下で説明するように、委任されたイベントを使用してイベント ハンドラーをアタッチするのが最善です。
リーリー まだ作成されていない子孫要素のイベントを処理できることに加えて、委任イベントのもう 1 つの利点は、多数の要素を監視する必要がある場合にオーバーヘッドを削減できることです。 tbody
に 1,000 行あるデータ テーブルで、最初のコード例は 1,000 個の要素にハンドラーをアタッチします。
デリゲート イベント メソッド (2 番目のコード例) は、イベント ハンドラーを 1 つの要素
tbody
tbody から
tbody)。
注:
SVG では機能しません。
P粉7224099962024-03-26 11:50:47
jQuery 1.7 以降では、jQuery.fn.on
を使用してセレクター パラメーターを設定する必要があります:
イラスト:
これはイベント委任と呼ばれ、次のように機能します。このイベントは、処理される必要がある要素の静的な親 (staticAncestors
) に付加されます。この jQuery ハンドラーは、この要素またはその子孫要素の 1 つでイベントが発生するたびに起動されます。次に、ハンドラーは、イベントをトリガーした要素がセレクター (dynamicChild
) と一致するかどうかを確認します。一致するものがあれば、カスタム ハンドラー関数が実行されます。
それまでは、live(): を使用することをお勧めします。
リーリー
live() は 1.7 で非推奨になり、
on() に置き換えられ、1.9 で完全に削除されました。
live()署名:
リーリー
dosomething の要素を動的に作成する場合、イベントを
既存の親 にバインドできます (これが問題の核心です)動的コンテンツにバインドされているものではなく、バインドされているものが必要な場合)、これは document にすることができます (これが最も簡単なオプションです)。ただし、
document は最も効率的なオプション
. ではない可能性があることに注意してください。
リーリー