stopImmediatePropagation は VanillaJS にもあった
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ IE でも 9 から使えた
event に stopImmediatePropagation というメソッドがあります
jQuery でおなじみの その要素に複数リスナがある場合に 残りのリスナの実行もキャンセルする機能です
jQuery は独自にイベントにつけたリスナを管理してるので 残りを実行しないということができましたが Native な JavaScript だとそういう機能をサポートしてないと思っていました
少し前にライブラリがセットするリスナをキャンセルしたくていい方法ないか調べていたときにヒントにならないかと stopImmediatePropagation を調べると MDN のページがありました
MDN ということはもしや!!
と思って確認すると普通に使えました
最近の追加かなと見てみるとなんとかなり昔で Chrome はほぼ初期化から IE は 9 からのようです
jQuery なんかライブラリはいらない!そのままの JavaScript で十分! と言ってる割にこんな基本的なものを知らなかったとは不覚過ぎます
ついでなので stopImmediatePropagation を簡単に機能を説明すると
このコードで span をクリックすると click の 2 つのリスナが実行されて 次にバブリングによって div の click リスナが実行されます
なので結果は
e.stopImmediatePropagation のコメントアウトを解除すると
その要素の次のリスナもキャンセルするので
e.stopPropagation のほうのコメントアウトを解除すると
その要素のリスナは実行してバブリングで上の要素に伝わらなくなるので
これは数少ない jQuery のメリットだと思っていたのにこれも JavaScript で十分だったとなると jQuery はホントいらないものになってますね
IE 除けば jQuery の必要性は サードパーティ製ライブラリのみといっていいのかもしれません
jQuery でおなじみの その要素に複数リスナがある場合に 残りのリスナの実行もキャンセルする機能です
jQuery は独自にイベントにつけたリスナを管理してるので 残りを実行しないということができましたが Native な JavaScript だとそういう機能をサポートしてないと思っていました
少し前にライブラリがセットするリスナをキャンセルしたくていい方法ないか調べていたときにヒントにならないかと stopImmediatePropagation を調べると MDN のページがありました
MDN ということはもしや!!
と思って確認すると普通に使えました
最近の追加かなと見てみるとなんとかなり昔で Chrome はほぼ初期化から IE は 9 からのようです
jQuery なんかライブラリはいらない!そのままの JavaScript で十分! と言ってる割にこんな基本的なものを知らなかったとは不覚過ぎます
ついでなので stopImmediatePropagation を簡単に機能を説明すると
<div id="div">
div
<span id="span">span</span>
</div>
<script>
div.addEventListener("click", e => console.log(3))
span.addEventListener("click", e => {
console.log(1)
// e.stopImmediatePropagation()
// e.stopPropagation()
})
span.addEventListener("click", e => console.log(2))
</script>
div
<span id="span">span</span>
</div>
<script>
div.addEventListener("click", e => console.log(3))
span.addEventListener("click", e => {
console.log(1)
// e.stopImmediatePropagation()
// e.stopPropagation()
})
span.addEventListener("click", e => console.log(2))
</script>
このコードで span をクリックすると click の 2 つのリスナが実行されて 次にバブリングによって div の click リスナが実行されます
なので結果は
1
2
3
です2
3
e.stopImmediatePropagation のコメントアウトを解除すると
その要素の次のリスナもキャンセルするので
1
だけになりますe.stopPropagation のほうのコメントアウトを解除すると
その要素のリスナは実行してバブリングで上の要素に伝わらなくなるので
1
2
となります2
これは数少ない jQuery のメリットだと思っていたのにこれも JavaScript で十分だったとなると jQuery はホントいらないものになってますね
IE 除けば jQuery の必要性は サードパーティ製ライブラリのみといっていいのかもしれません