Event.stopPropagation() - 伝播を止める
stopPropagation()は、Eventのメソッドです。現在のイベントで、イベントの伝播を終了させます。
概要
- 名前
- stopPropagation
- 所属
- Event
- IDL
void stopPropagation();
- 仕様書
- https://dom.spec.whatwg.org/#dom-event-stoppropagation
説明
引数はありません。返り値もありません。
デモ
Event.stopPropagation()のデモです。button要素とdiv要素(#hoge)にイベントを設定しました。一番上のbutton要素はイベント内でメソッドを実行して伝播を止めるため、その後に予定されているバブリングフェイズでのdiv要素のイベントが発生しません。
<!-- このコードは編集できます。 -->
<!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="run1">実行 (伝播を止める)</button></p>
<p><button id="run2">実行 (伝播を止めない)</button></p>
</div>
<p><button id="clear">削除</button></p>
<hr>
<div id="result"></div>
<script>
/** try it! **/
var element1 = document.getElementById( "run1" ) ;
var element2 = document.getElementById( "run2" ) ;
var callbackFn = function ( event ) {
if ( event.target === element1 ) event.stopPropagation() ;
resultElement.appendChild( new Text( "currentTarget: " + event.currentTarget + "(#" + event.currentTarget.id + ")" + "\n" ) ) ;
resultElement.appendChild( new Text( "target: " + event.target + "\n→\n" ) ) ;
} ;
element1.addEventListener( "click", callbackFn ) ; // button要素
element2.addEventListener( "click", callbackFn ) ; // button要素
document.getElementById( "hoge" ).addEventListener( "click", callbackFn, false ) ; // 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 |
---|---|---|---|---|---|---|---|
● | ● | ● | ● | ● 9+ | ● | ● | ● |
関連記事
- Event.cancelBubble
- cancelBubbleは、Eventのプロパティです。trueを代入すると、現在のイベントで伝播を終了させます。このプロパティは利用できなくなる予定です。代わりにstopPropagation()を利用して下さい。
- Event.stopImmediatePropagation()
- stopImmediatePropagation()は、Eventのメソッドです。同じオブジェクトの同じイベントに複数のリスナーが設定されている場合、このメソッドを実行すると、その時点で他のリスナーを実行しません。
- Event.isTrusted
- isTrustedは、Eventのプロパティです。イベントがユーザーの操作により発生したか否かを返します。例えばclickイベントが、ユーザーがクリック操作をして発生した場合はtrue、EventTarget.dispatchEvent()など、スクリプトで発生させた場合はfalseを返します。
- Event.composed
- composedは、Eventのプロパティです。通常のDOMとShadow DOMの間でイベントが伝播するか否かを返します。