[JavaScript]イベント転送/イベントバッファ、キャプチャ
8017 ワード
JavaScriptでは、イベントは自分だけではありません.
イベントは親と子のタグに送信されます.
これらのイベントには2つの転送方法があります.
イベントBubbling/イベントBubbling
イベントは親と子のタグに送信されます.
これらのイベントには2つの転送方法があります.
イベントBubbling/イベントBubbling
イベントBubblingとは、イベントが発生したときに親(親)タグを検索してイベントを伝播する方法です.
<body>
<div class="one">
one
<div class="two">
two
<div class="three">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種類のイベントがトリガーされると、
「click」イベントの親(親)タグが同じイベントも実行されます.var one = document.querySelector(".one");
var two = document.querySelector(".two");
var three = document.querySelector(".three");
one.addEventListener("click", logEvent);
two.addEventListener("mouseover", logEvent);
three.addEventListener("click", logEvent);
function logEvent(event) {
console.log(event.currentTarget.className);
}
同じHTMLで"click"
から"mouseover"
に変更されました
3つのクラスにマウスを置くと、2つのコンソールが表示されます.
3つのクラスをクリックすると、3つまたは1つのコンソールが表示されます.
(異なるイベントであるため、2つのクラスは無視されます!)
イベントのキャプチャ/イベントのキャプチャ
イベントが開いている場合は、バブル化とは逆です.
イベントが発生した場合は、トップレベルのラベルbodyラベルから
イベント発生ラベルにイベントを伝播します.
div.addEventListener("click", logEvent, true);
既存のaddEventListener
メソッドは、イベントbundlingをdefault(false)
値に指定します.
したがって、第3のパラメータにtrue
を入れると、イベントリスナーは、イベントキャプチャ方式で登録される.
既存のコードで上記の変更を行い、3つのイベントを実行します.
コンソールは最上位oneクラスから出力されます.
Reference
この問題について([JavaScript]イベント転送/イベントバッファ、キャプチャ), 我々は、より多くの情報をここで見つけました
https://velog.io/@kyoung-jnn/JavaScript-이벤트-전달-방식-이벤트-버블링-캡쳐링
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
<body>
<div class="one">
one
<div class="two">
two
<div class="three">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);
}
var one = document.querySelector(".one");
var two = document.querySelector(".two");
var three = document.querySelector(".three");
one.addEventListener("click", logEvent);
two.addEventListener("mouseover", logEvent);
three.addEventListener("click", logEvent);
function logEvent(event) {
console.log(event.currentTarget.className);
}
イベントが開いている場合は、バブル化とは逆です.
イベントが発生した場合は、トップレベルのラベルbodyラベルから
イベント発生ラベルにイベントを伝播します.
div.addEventListener("click", logEvent, true);
既存のaddEventListener
メソッドは、イベントbundlingをdefault(false)
値に指定します.したがって、第3のパラメータに
true
を入れると、イベントリスナーは、イベントキャプチャ方式で登録される. 既存のコードで上記の変更を行い、3つのイベントを実行します.
コンソールは最上位oneクラスから出力されます.
Reference
この問題について([JavaScript]イベント転送/イベントバッファ、キャプチャ), 我々は、より多くの情報をここで見つけました https://velog.io/@kyoung-jnn/JavaScript-이벤트-전달-방식-이벤트-버블링-캡쳐링テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol