SYNCERのロゴ
アイキャッチ画像

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>

サポート状況

ChromeFirefoxSafariEdgeIEOperaiOS SafariAndroid
53+× 10+×× 40+ 10.0+×
  • Twitterでシェア
  • Facebookでシェア
  • Google+でシェア
  • はてなブックマークでシェア
  • pocketに保存
  • LINEでシェア
更新履歴
2017年10月8日 (日)
コンテンツを公開しました。