Event.composedPath() - 伝播の流れ
composedPath()は、Eventのプロパティです。イベントが伝播するノードを順番に含んだ配列を返します。イベントフェイズにおいて、ターゲットフェイズにあたるノードが配列の先頭で、そこからバブリングフェイズで伝播する順番に、最後がWindowになるように格納されていきます。イベントが設定されているか否かは関係ありません。
概要
- 名前
- composedPath
- 所属
- Event
- IDL
sequence<EventTarget> composedPath();
- 仕様書
- https://dom.spec.whatwg.org/#dom-event-composedpath
説明
引数はありません。返り値は、ターゲットフェイズにあたるノードが先頭で、Windowが末尾の配列を返します。
イベントフェイズに関しては、EventTargetのチュートリアルで説明しています。
デモ
Event.composedPath()のデモです。button要素とdiv要素(#hoge)に同じイベントを設定しました。イベントの伝播の順番に格納された配列が返るのを確認しましょう。
<!-- このコードは編集できます。 -->
<!DOCTYPE html>
<html>
<head>
<style>
div#hoge {
background-color: #fffff0 ;
padding: 24px ;
}
div#result {
white-space: pre-wrap ;
}
</style>
</head>
<body>
<div id="hoge">
<p><button id="run">実行</button></p>
<p><button id="clear">削除</button></p>
</div>
<hr>
<div id="result"></div>
<script>
/** try it! **/
var callbackFn = function ( event ) {
console.log( event.composedPath() ) ;
resultElement.appendChild( new Text( "currentTarget: " + event.currentTarget + "(#" + event.currentTarget.id + ")" + "\n" ) ) ;
resultElement.appendChild( new Text( "composedPath(): " + event.composedPath() + "\n→\n" ) ) ;
} ;
document.getElementById( "run" ).addEventListener( "click", callbackFn ) ; // button要素
document.getElementById( "hoge" ).addEventListener( "click", callbackFn ) ; // div要素
/** try it! **/
var resultElement = document.getElementById( "result" ) ;
document.getElementById( "clear" ).onclick = function ( event ) {
event.stopPropagation() ;
resultElement.innerHTML = "" ;
}
</script>
</body>
</html>
サポート状況
Chrome | Firefox | Safari | Edge | IE | Opera | iOS Safari | Android |
---|---|---|---|---|---|---|---|
● 53+ | × | ● 10+ | × | × | ● 40+ | ● 10.0+ | × |
関連記事
- Event.stopPropagation()
- stopPropagation()は、Eventのメソッドです。現在のイベントで、イベントの伝播を終了させます。
- Event.defaultPrevented
- defaultPreventedは、Eventのプロパティです。イベントにおいて、規定の動作がキャンセルされたか否かを返します。
- Event.preventDefault()
- preventDefault()は、Eventのメソッドです。例えばリンクをクリックした時に遷移する、チェックボックスをクリックしたらチェックが入る、などの規定の動作を行ないません。イベントの伝播は止まりません。
- Event.stopImmediatePropagation()
- stopImmediatePropagation()は、Eventのメソッドです。同じオブジェクトの同じイベントに複数のリスナーが設定されている場合、このメソッドを実行すると、その時点で他のリスナーを実行しません。