ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript でイベント ハンドラーを動的に生成するときにクロージャの落とし穴を回避するにはどうすればよいですか?

JavaScript でイベント ハンドラーを動的に生成するときにクロージャの落とし穴を回避するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-29 12:34:10143ブラウズ

How to Avoid Closure Pitfalls When Dynamically Generating Event Handlers in JavaScript?

JavaScript でループを使用してイベント ハンドラーを動的に生成する方法

特定のシナリオでは、イベント ハンドラーを一連の要素に割り当てることが必要になります。 Javascript を通じて動的に生成され、「イベント ハンドラーによるループ」と呼ばれることがよくあります。この問題は、インライン イベント ハンドラーを使用するのではなく、生成された要素に同様の機能があり、独自の動作を持つイベント ハンドラーを必要とする場合に発生します。

10 個の がある例を考えてみましょう。 AJAX 応答から生成されたタグがあり、ループ内の各タグに onclick イベントを割り当てたいとします。次のコードは簡単な解決策のように思えます:

for (i = 1; i < 11; i++) {
  document.getElementById("b" + i).onclick = function () {
    alert(i);
  };
}

しかし、このコードは実行時に onclick イベントを最後の に割り当てるだけです。タグが付けられ、すべてのクリックに対してアラート ボックスに「11」が表示されます。この動作の理由は、すべてのイベント ハンドラーが同じ i 変数を共有し、この変数がループ内でインクリメントされ、最終的に最後に生成された を指すという事実にあります。

この問題に対処し、それぞれの タグには独自の一意のイベント ハンドラーがあるため、ハンドラーごとに個別の関数を定義し、i 値をパラメーターとして渡す必要があります。そうすることで、各ハンドラーは i 変数の独自のインスタンスを持ち、意図した機能を維持します。

function handleElement(i) {
  document.getElementById("b" + i).onclick = function () {
    alert(i);
  };
}

for (i = 1; i < 11; i++) {
  handleElement(i);
}

この改訂されたコードは、各 に個別の onclick イベント ハンドラーを割り当てます。タグ、および の場合タグをクリックすると、予期される動作を反映した正しい i 値がアラート ボックスに表示されます。この手法を使用すると、一連の要素のイベント ハンドラーを動的に生成し、個々の要素のイベントを適切に処理できるようになります。

以上がJavaScript でイベント ハンドラーを動的に生成するときにクロージャの落とし穴を回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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