前提・実現したいこと
ある既存のホームページをつかって、コードは見ずに真似て作っています。
その中の折り畳みメニューの作成において、質問と回答という形で、質問を押せばその下に
回答が出てきて、その状態でもう一度質問を押せば、回答は非表示にされるという機能をつけようとしています。なお現時点では、回答には文章は打ち込まず、背景色にオレンジをつけています。
発生している問題・エラーメッセージ
質問をクリックすれば回答が出てきて、その状態でまた質問をクリックすれば回答が非表示になるという段階まではたどり着きましたが、質問をクリックしたときにすべての質問に回答が付いてしまいます。実際には質問1をクリックしたなら、その質問1に対する回答のみが表示されるようにしたいです。
該当のソースコード
Javascript
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
HTML
1<section id="parent" class="freq"> 2 <h1 id="oque"></h1> 3 <div id="ask1" class="question"></div> 4 <div class="comeup"></div> 5 <div id="ask2" class="question"></div> 6 <div class="comeup"></div> 7 <div id="ask3" class="question"></div> 8 <div class="comeup"></div> 9 <div id="ask4" class="question"></div> 10 <div class="comeup"></div> 11 <div id="ask5" class="question"></div> 12 <div class="comeup"></div> 13 <div id="ask6" class="question"></div> 14 <div class="comeup"></div> 15 <div id="ask7" class="question"></div> 16 <div class="comeup"></div> 17 <div id="ask8" class="question"></div> 18 <div class="comeup"></div> 19 <div id="ask9" class="question"></div> 20 <div class="comeup"></div> 21 <div id="ask10" class="question"></div> 22 <div class="comeup"></div> 23 <div id="ask11" class="question"></div> 24 <div class="comeup"></div> 25 <div id="ask12" class="question"></div> 26 <div class="comeup"></div> 27 <div id="ask13" class="question"></div> 28 <div class="comeup"></div> 29 <div id="ask14" class="question"></div> 30 <div class="comeup"></div> 31 <div id="ask15" class="question"></div> 32 <div class="comeup"></div> 33 </section> 34 </div>
CSS
1 .freq { 2 text-align: center; 3 padding: 15px 0; 4 } 5 .question { 6 width: 900px; 7 text-align: left; 8 font-weight: bold; 9 font-size: 22px; 10 padding: 10px 0 10px 30px; 11 margin-bottom: 5px; 12 margin-left: auto; 13 margin-right: auto; 14 cursor: pointer; 15 border: 1px solid #efefef; 16 user-select: none; 17 position: relative; 18 } 19 20 .question::after { 21 width: 10px; 22 height: 10px; 23 content: ""; 24 position: absolute; 25 margin: 0; 26 border-top: 3px solid rgba(179, 179, 179, 0.8); 27 border-right: 3px solid rgba(179, 179, 179, 0.8); 28 -webkit-transform: rotate(135deg); 29 right: 25px; 30 top: 15px; 31 cursor: pointer; 32 } 33 34 .question:hover { 35 text-decoration: underline; 36 } 37 38 .appear { 39 width: 932px; 40 height: 100px; 41 border: 1px solid rgba(206, 206, 206, 0.1); 42 margin: 0 auto; 43 background: orange; 44 }
Javascript
1'use strict' 2 3{ 4 let initialState = false; 5 const oque = document.getElementById('oque'); 6 const questions = [...document.querySelectorAll('.question')]; 7 const asks = [ 8 'プログラミングスキルは必要ですか?', 9 '滞在中の宿泊先はどうなりますか?', 10 '参加費以上に稼げなかったらどうなりますか?', 11 '滞在中の食事はどうなりますか?', 12 '追加でかかる費用はありますか?', 13 '就職、転職はできますか?', 14 'フリーランスにならなければならないのですか?', 15 'ノマドワーカー的に世界を旅しながら働きたいです。可能ですか?', 16 '学ぶプログラミング言語は何ですか?', 17 '将来的にwebサービス、アプリ、メディアを作りたいです。', 18 '次回開催の予定はありますか?', 19 '海外に出るのが初めてで不安です。', 20 'タイ語、英語が一切話せません。参加可能でしょうか?', 21 '治安はどうですか?', 22 'パソコンは必要ですか?', 23 ]; 24 const parent = document.getElementById('parent'); 25 26 oque.textContent = 'よくある質問'; 27 28 for(let i = 0; i < questions.length; i++) { 29 questions[i].textContent = asks[i]; 30 } 31 32 const comeups = [...document.querySelectorAll('.comeup')]; 33 34 if (initialState == false) { 35 questions.forEach(question => { 36 question.addEventListener('click', () => { 37 comeups.forEach(comeup => { 38 comeup.classList.toggle('appear'); 39 }); 40 }); 41 }); 42 } 43} 44
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。