ホームページ  >  記事  >  ウェブフロントエンド  >  イベントバブリングの仕組みと使い方を解析する

イベントバブリングの仕組みと使い方を解析する

WBOY
WBOYオリジナル
2024-01-13 09:26:06955ブラウズ

イベントバブリングの仕組みと使い方を解析する

イベント バブリングは、フロントエンド開発でよく使用されるイベント配信メカニズムです。この記事では、イベント バブリングの原理と応用について詳しく説明し、読者の理解を助けるコード例を示します。

1. イベント バブリングの原理
イベント バブリングとは、要素上のイベントがトリガーされると、そのイベントがルート要素まで段階的に上位の要素に渡されることを意味します。言い換えれば、イベントは最も具体的な要素から始まり、より一般的な要素に向かって渡されます。

イベント バブリングの原理は、次の点に要約できます。

  1. イベントは、子要素から親要素に渡され、ルート要素に至るまで渡されます。
  2. 子要素のイベントは親要素に渡され、次にルート要素まで 1 つ上のレベルの親要素に渡されます。
  3. イベント配信プロセス中に、各レイヤーの親要素が同じイベント ハンドラーにバインドされている場合、これらのイベント ハンドラーが呼び出されます。

2. イベント バブリングの適用

  1. 簡素化されたイベント バインディング: イベント バブリング メカニズムを使用することで、イベント ハンドラーを親要素にバインドできるため、必要性が軽減されます。イベントを複数のサブ要素にそれぞれバインドします。このアプローチにより、コードの保守性と実行効率が向上します。

たとえば、複数の子要素ボタンを含む親要素 div があり、各ボタンには同じクリック イベント ハンドラーがあります。イベント バブリングを使用する場合、以下に示すように、イベントを親要素 div にバインドするだけで済みます。

<div id="parentElement">
  <button>按钮1</button>
  <button>按钮2</button>
  <button>按钮3</button>
</div>

<script>
var parentElement = document.getElementById('parentElement');
parentElement.addEventListener('click', function(e) {
  console.log(e.target.innerHTML + '被点击了');
});
</script>

上記のコードでは、クリック イベント ハンドラーを親要素 div にバインドします。子要素のボタンがクリックされると、イベントが親要素 div にバブルアップし、親要​​素のイベント ハンドラーをトリガーします。イベントオブジェクトのtarget属性を出力することで、クリックされた特定のボタンを取得できます。

  1. イベント委任: イベント委任は、イベント バブリング メカニズムを使用して動的に追加された要素を処理する一般的なテクノロジです。イベント ハンドラーを親要素にバインドすると、動的に追加された子要素で対応するイベントをトリガーできます。

たとえば、前の例では次のように新しいボタン button を動的に追加しました:

<div id="parentElement">
  <button>按钮1</button>
  <button>按钮2</button>
  <button>按钮3</button>
</div>

<script>
var parentElement = document.getElementById('parentElement');
parentElement.addEventListener('click', function(e) {
  if (e.target.tagName.toLowerCase() === 'button') {
    console.log(e.target.innerHTML + '被点击了');
  }
});

var newButton = document.createElement('button');
newButton.innerHTML = '新按钮';
parentElement.appendChild(newButton);
</script>

上記のコードでは、親要素 div にバインドします。クリック イベント ハンドラーは次のとおりです。イベントによってトリガーされたターゲット要素がボタンであるかどうかを判断して、処理する必要のない要素を除外するために作成されます。このようにして、新しく追加された要素ごとに個別のイベントをバインドすることなく、動的に追加された要素のクリック イベントを処理できます。

  1. イベントの伝播を停止する: イベント ハンドラーでイベント オブジェクトの stopPropagation() メソッドを呼び出すことにより、イベントの継続的な伝播を停止できます。

たとえば、以下に示すように、クリック イベントを子要素のボタンにバインドし、イベント ハンドラーで stopPropagation() メソッドを呼び出します。

<div id="parentElement">
  <button>按钮1</button>
  <button>按钮2</button>
  <button>按钮3</button>
</div>

<script>
var buttons = document.getElementsByTagName('button');

for (var i = 0; i < buttons.length; i++) {
  buttons[i].addEventListener('click', function(e) {
    console.log(e.target.innerHTML + '被点击了');
    e.stopPropagation();
  });
}

var parentElement = document.getElementById('parentElement');
parentElement.addEventListener('click', function(e) {
  console.log('父元素被点击了');
});
</script>

上記のコードでは、子要素のボタンがクリックされると、イベントは子要素自体のクリック イベント ハンドラーをトリガーし、stopPropagation() メソッドを呼び出してイベントの配信の継続を停止します。したがって、親要素のクリック イベント ハンドラーは起動されません。

概要:
イベント バブリングは、フロントエンド開発で一般的に使用されるイベント配信メカニズムであり、イベント バインディングを簡素化し、イベント委任を実装し、イベント配信を制御できます。イベントバブリングを適切に利用することで、コードの保守性と実行効率を向上させることができます。

以上がイベントバブリングの仕組みと使い方を解析するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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