JSにて状態を管理して、全て「完了」になった場合と1つでも「未完了」がある場合とて表示を切り替えたい。

実現したいこと

上から3つのボックスを順に並べており、以下状態を表しています。

◆グレーアウト・・・完了
◆青枠・・・確認中
◆グレー枠・・・待機

現状テスト2の「こちら」(テスト1の「こちら」リンクは特に意味なし)のリンクをクリックするとクリックした対象のボックスは完了済+グレーアウトし、次確認事項の直下のボックス(テスト3)が青枠で囲って選択されているようなスタイルになるようにしています。

イメージ説明
イメージ説明

jsの知識が浅く、classList()を使用してスタイルを切り替えており正しい挙動はしてのですが、もっと良いやり方があればご教示いただけると幸いです・・

今回、テスト2とテスト3に状態を持たせて全て「完了+グレーアウト」となった場合・・・
「全て完了した方はこちら」という文言を一番下に表示。

上記以外(未完了が1つでもある場合)は・・・
「未完了の方は上記を全て完了にしてください」という文言を表示。

状態を持たせて、表示を切り替える方法が分からず行き詰まってしまっております・・

分かる方いらっしゃいましたらお力添えを頂きたいです。

以上、よろしくお願い致します。

該当のソースコード

html

<div id="test1" class="gray"> <div> <div class="main"> <ul class="center"> <h1 class="inner_ttl">テスト1</h1> <a href="#" class="link_txt" value="a">こちら</a> </ul> </div> <p class="txt">完了</p> </div> </div> <div id="test2" class="blue"> <div> <div class="main"> <ul class="center"> <h1 class="inner_ttl">テスト2</h1> <a href="#" class="link_txt" value="b" onclick="cl1()">こちら</a> </ul> </div> <p class="txt">確認中</p> </div> </div> <div id="dsp1" class="blue" style="display: none; border: none; background-color: gray;"> <div> <div class="main"> <ul class="center"> <h1 class="inner_ttl">テスト2</h1> </ul> </div> <p class="txt">完了</p> </div> </div> <div id="test3" class="red"> <div> <div class="main"> <ul class="center"> <h1 class="inner_ttl">テスト3</h1> <a href="#" class="link_txt" value="c" onclick="cl2()">こちら</a> </ul> </div> <p class="txt">待機</p> </div> </div> <div id="dsp2" class="red" style="display: none; background-color: gray;"> <div> <div class="main"> <ul class="center"> <h1 class="inner_ttl">テスト3</h1> </ul> </div> <p class="txt">完了</p> </div> </div>

css

.gray{ border-radius: 5px; background-color: gray; padding: 20px 25px; margin: 30px;} .blue{ border-radius: 5px; background-color: #fff; padding: 20px 25px; border: 2px solid blue; margin:20px 0px; margin: 30px;} .red{ border-radius: 5px; background-color: #fff; padding: 20px 25px; border: 2px solid #eee; margin: 30px;} .txt{ font-size: 16px;} .main{ display: flex;} .center{ width: 100%; display: flex; justify-content: space-between; align-items: center;} .inner_ttl{ font-size: 14px;} .link_txt{ color: black; cursor: pointer;} .none{ display: none;} .dsp1{ display: block!important;} .dsp2{ display: block!important;} .blue{ border: 2px solid blue;}

js

function cl1() { let test2 = document.getElementById("test2"); let test3 = document.getElementById("test3"); let dsp1 = document.getElementById("dsp1"); test2.classList.add('none'); test3.classList.add('blue'); dsp1.classList.add('dsp1');} function cl2() { let test3 = document.getElementById("test3"); let dsp2 = document.getElementById("dsp2"); test3.classList.add('none'); dsp2.classList.add('dsp2');}

コメントを投稿

0 コメント