ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript イベント リスナーが動的に作成された要素で動作しないのはなぜですか? イベント委任を使用して修正するにはどうすればよいですか?

JavaScript イベント リスナーが動的に作成された要素で動作しないのはなぜですか? イベント委任を使用して修正するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-17 21:21:10139ブラウズ

Why Doesn't My JavaScript Event Listener Work on Dynamically Created Elements, and How Can I Fix It Using Event Delegation?

JavaScript での動的イベント処理

Web アプリケーションを操作する場合、多くの場合、ページ上の要素を動的に作成して操作する必要があります。ただし、動的に作成された要素にイベント ハンドラーをアタッチするのは難しい場合があります。

問題

提供されたコード スニペットでは、HTML ボタンが動的に作成され、DOM に挿入されます。 。イベント リスナーがこのボタンにアタッチされますが、ボタンをクリックしてもイベント ハンドラーはトリガーされません。

イベント委任

問題は、イベント リスナーがは、DOM に追加される前にボタンにアタッチされます。ボタンが動的に作成されると、後で DOM にアタッチされますが、イベント リスナーの呼び出しはすでに発生しています。

これに対する解決策は、イベント委任です。イベント委任には、ターゲット要素に直接ではなく、親要素にイベント リスナーをアタッチすることが含まれます。イベントが発生すると、イベントは、アタッチされたイベント リスナーを持つ親要素に到達するまで、DOM ツリーを上に伝播します。

document.addEventListener("click", function(e) {
  const target = e.target.closest("#btnPrepend"); // Or any other selector.

  if (target) {
    // Do something with `target`.
  }
});

この例ではでは、closest() メソッドを使用して、クリック イベントが #btnPrepend 要素またはその子孫内で発生したかどうかを判断します。その場合、ターゲット変数はクリックされた要素を参照します。

jQuery の代替

jQuery は、on() を使用してイベントの委任を簡素化します。 method.

$(document).on("click", "#btnPrepend", function() {
  // Do something with `$(this)`.
});

結論

イベント委任は、動的に作成された要素にイベント ハンドラーをアタッチするための信頼できる方法を提供します。イベント リスナーを親要素にアタッチすると、ターゲット要素が後で DOM に追加された場合でもイベント ハンドラーが確実にトリガーされます。

以上がJavaScript イベント リスナーが動的に作成された要素で動作しないのはなぜですか? イベント委任を使用して修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。