ホームページ  >  に質問  >  本文

動的要素イベント バインディング: 動的に作成された要素にイベントをバインドするにはどうすればよいですか?

ページ上のすべての選択ボックスをループし、.hover イベントをそれらにバインドして、マウスのオン/オフで幅を変更するコードがあります。調整。

これは、ページの準備が完了し、適切に動作している場合に発生します。

私が抱えている問題は、最初のループの後に Ajax または DOM 経由で追加された選択ボックスにはイベントがバインドされないことです。

このプラグイン (jQuery Live Query Plugin) を見つけましたが、プラグインを使用してページにさらに 5,000 を追加する前に、jQuery を直接使用するか、他のオプションを使用して、その方法を知っている人がいるかどうかを確認したいと思いました。 。

P粉046878197P粉046878197228日前681

全員に返信(2)返信します

  • P粉864594965

    P粉8645949652024-03-26 12:09:12

    jQuery.fn.on のドキュメントに詳しい説明があります。

    ###要するに:###

    したがって、以下の例では、コードを生成する前に

    #dataTable tbody tr

    が存在している必要があります。 リーリー 新しい HTML がページに挿入される場合は、以下で説明するように、委任されたイベントを使用してイベント ハンドラーをアタッチするのが最善です。

    委任されたイベントの利点は、後でドキュメントに追加される子孫要素からのイベントを処理できることです。たとえば、テーブルは存在するが、コードを使用して行が動的に追加された場合、次のように処理されます:

    リーリー まだ作成されていない子孫要素のイベントを処理できることに加えて、委任イベントのもう 1 つの利点は、多数の要素を監視する必要がある場合にオーバーヘッドを削減できることです。 tbody

    に 1,000 行あるデータ テーブルで、最初のコード例は 1,000 個の要素にハンドラーをアタッチします。

    デリゲート イベント メソッド (2 番目のコード例) は、イベント ハンドラーを 1 つの要素 tbody

    に接続するだけであり、イベントは 1 レベル (クリックされた

    tbody からtbody)。 注:

    委任されたイベントは

    SVG では機能しません。

    返事
    0
  • P粉722409996

    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()署名: リーリー

    ...は、次の

    on() 署名に置き換えることができます: リーリー


    たとえば、ページがクラス名

    dosomething の要素を動的に作成する場合、イベントを 既存の親 にバインドできます (これが問題の核心です)動的コンテンツにバインドされているものではなく、バインドされているものが必要な場合)、これは document にすることができます (これが最も簡単なオプションです)。ただし、document は最も効率的なオプション . ではない可能性があることに注意してください。 リーリー

    イベントがバインドされているときに存在する任意の親が使用できます。例えば### リーリー ###に適用されます### リーリー

    返事
    0
  • キャンセル返事