(JS)イベントBubblingとCapture
8952 ワード
イベントバッファ
イベントbundlingとは、あるスクリーン要素でイベントが発生すると、そのイベントがより上位のスクリーン要素に渡される特性です.
上のスクリーン要素は?
HTML要素には基本的にツリー構造があります.ツリー構造では、1つのレベルの上にある要素を親要素、bodyラベルを最上位要素と呼びます.
<body>
<div class="one">
<div class="two">
<div class="three"></div>
</div>
</div>
</body>
var divs = document.querySelectorAll('div');
divs.forEach(function(div) {
div.addEventListener('click', logEvent);
});
function logEvent(event) {
console.log(event.currentTarget.className);
}
上のコードは、3つのdivラベルにclickイベントを登録し、クリックするとlogEvent関数を実行するコードです.上図のように、divタグ
<div class="three"></div>
をクリックすると、以下の結果が実行されます.画面要素にイベントが発生すると、ブラウザはイベントを上部の画面要素に伝播します.
したがって,クラス名3→2→1の順にdivタグに登録されたイベントが実行される.
注意点は、各タグにイベントが登録されているため、イベントが親要素に転送されたと判断できます.イベントが特定のdivタグにのみ依存している場合、上記の操作結果は判断できません.
同様に、子要素から親要素へのイベント伝播方式をイベントBubblingと呼ぶ.
stopPropagation()
そのために使用した
e.stopPropagation()
このサブエレメントでのみイベントが励起され、親エレメントにbundlingされないようにします.イベントのキャプチャ
addEventListner()
部分オプションcapture: true
<body>
<div class="one">
<div class="two">
<div class="three"></div>
</div>
</div>
</body>
var divs = document.querySelectorAll('div');
divs.forEach(function(div) {
div.addEventListener('click', logEvent, {
capture: true // default 값은 false입니다.
});
});
function logEvent(event) {
console.log(event.currentTarget.className);
}
同様に<div class="threee"></div>
をクリックしても、以下の結果が得られます.Reference
この問題について((JS)イベントBubblingとCapture), 我々は、より多くの情報をここで見つけました https://velog.io/@yunsungyang-omc/JS-이벤트-버블링Event-Bubbling-과-캡쳐captureテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol