【javascript】子要素をクリックした時に親要素へ影響させないstopPropagation()

子要素クリックすると親要素まで影響
子要素をクリックすると、親要素まで影響してしまいます。 以下の子要素をクリックしてみてください。
クリックしたらクラスactiveを追加し、背景色を変えます。
以下のコードでは、子要素をクリックすると、親要素 までクラスが追加され、背景色が変わってしまいます。
孫要素をクリックすると、子要素、親要素にまでクラスが 追加されてしまいます。
const dir1 = document.querySelector(".dir1");
const dir2 = document.querySelector(".dir2");
const dir3 = document.querySelector(".dir3");
dir1.addEventListener("click", function(){
dir1.classList.toggle("active");
});
dir2.addEventListener("click", function(){
dir2.classList.toggle("active");
});
dir3.addEventListener("click", function(){
dir3.classList.toggle("active");
});
親要素に影響させない stopPropagation()
子要素(孫要素)にfunction(e) と書き、functionの中に、e.stopPropagation() と書けば、親要素(子要素)に影響しません。
dir1.addEventListener("click", function(){
dir1.classList.toggle("active");
});
// e を忘れないように‼
dir2.addEventListener("click", function(e){
e.stopPropagation(); // ポイント‼
dir2.classList.toggle("active");
});
// e を忘れないように‼
dir3.addEventListener("click", function(e){
e.stopPropagation(); // ポイント‼
dir3.classList.toggle("active");
});
以下をクリックしてみてください。クリックした要素だけにクラスを追加することができました。
onclickを使った書き方
onclickを使えば、コードをもっと簡単にすることができます。
<!--親要素-->
<div class="dir1" onclick="isClicked(event,this)">
<!--子要素-->
<div class="dir2" onclick="isClicked(event,this)">
<!--孫要素-->
<div class="dir3" onclick="isClicked(event,this)">
</div>
</div>
JSはわずか4行だけです。
function isClicked(e,obj){
e.stopPropagation();
obj.classList.toggle("active")
}
参考

階層ツリーを作るときに stopPropagation() は必須です。

まとめ
- 子要素のクリックイベントを親要素に影響させないようにするには、 stopPropagation()
- onclickを使えば、JSのコードを簡略化できる。
こんな記事も読まれています。
-
【HTML】【CSS】【javascript】電卓の作り方
電卓のソースコードを2つ紹介します。javascriptはわずか数行で書けます。
-
【JacvaScript】【CSS】たった4行のJavaScriptでできるハンバーガーメニューの作り方
たった4行のJavaScriptで作るハンバーガーメニューの作り方について紹介します。✖をつくるには、transform-originがポイントです。
- リンク
-
波紋エフェクトを表現するjqueryのripples-min.jsの使い方
jqueryのripples-min.jsを使うと簡単に水面の波紋を表現できます。波紋の広がりの速度、波紋の大きさ、波紋のブレの値を変えていろいろ表現させると面白いです。
-
【Javascript】querySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法。
JavascriptのquerySelectorAllで要素を取得し、クリックしたら、クラスを追加したり、削除したりする方法について解説します。querySelectorと同じように書いてしまうとエラーがでます。forEachを使うとすべてに適用できます。
- リンク
-
要素の高さを取得する方法。getBoundingClientRectとは?window.innerHeightとは?window.pageYOffsetとは?
要素の高さを取得する方法について解説します。getBoundingClientRect、window.innerHeight、window.pageYOffsetについて理解し、要素がいつ画面に現れるかを把握できるようにしましょう。
-
Javascriptを使ったページネーションの実装
トップページの記事が増えてきたので、何とかページネーションで最新の記事だけを表示できないかと思っていたら、いい記事を発見しました。カスタマイズして実装することができました。
- リンク
-
【Javascript】マウスの指す(X, Y)座標とドラッグ & ドロップを理解する
マウスの指す(X, Y)座標とドラッグ & ドロップについて解説します。mousedown, mouseover, mousemove, mouseupを使います。
-
【javascript】連想配列をテーブルできれいに表示する方法
javascript(Object.entries)を使って、連想配列の中身をテーブルできれいに表示する方法について紹介します。
- リンク