質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

450閲覧

for文を使用して、ループさせたいです。

Suffenjoying

総合スコア10

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2021/03/01 12:40

編集2021/03/02 08:14

前提・実現したいこと

html, css, javascriptを使用して、
簡単な記憶力テストを作っています。

発生している問題・エラーメッセージ

for文で、5つの問題文と選択肢を作ったのですが、
5つ全てが画面いっぱいに出てきます。

私のイメージとしては、ボタンを選択して、nextボタンを押した後に、
次の問題を表示したいと考えています。
どのように書いたら宜しいでしょうか。

該当のソースコード

ソースコード javascript const $docs = document; const matches = 0 let questionPanel = $docs.getElementsByClassName('question')[0] async function getQuestions () { let result = await fetch('questions.json') let question_list = await result.json(); return question_list; } function displayQuestions(question_list) { let questions = question_list.questions for(let i = 0; i < questions.length; i++){ var question = questions[i].question var answer = questions[i].answer var choices = questions[i].fields var choice1 = choices.a var choice2 = choices.b var choice3 = choices.c var choice4 = choices.d let div = $docs.createElement('div') div.innerHTML = ` <ul class="ul"> <h3>Q${i + 1}. ${question}</h3> <div class="li"> <li>A. <input type="button" class="option" value="${choice1}"></input></li> <li>B. <input type="button" class="option" value="${choice2}"></input></li> <li>C. <input type="button" class="option" value="${choice3}"></input></li> <li>D. <input type="button" class="option" value="${choice4}"></input></li> </div> </ul> <a href="#" class="btn-circle-fishy">Next</a> ` questionPanel.appendChild(div) // button choices let buttons = $docs.getElementsByClassName('option') let next = $docs.getElementsByClassName('btn-circle-fishy')[0] if(i = 0) { addClass() doAll() } function doAll () { for(let j = 0; j < buttons.length; j++){ buttons[j].addEventListener('click', function() { buttons[j].classList.add('optionclicked') next.addEventListener('click', function() { if(answer === buttons[j].value) { matches += 1 } removeClass() displayNext() }) }) } } function displayNext () { div[i+1].classList.add('pressed') } function removeClass () { let divget = $docs.getElementsByClassName('pressed')[0] divget.classList.remove('pressed') } function addClass() { let ul = $docs.getElementsByClassName('ul') ul[i].classList.add('pressed') } } } $docs.addEventListener('DOMContentLoaded', getQuestions().then(question_list => displayQuestions(question_list)));
html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Memory Test</title> <link rel="stylesheet" href="styles.css"> </head> <body> <header class="header"> <h2>Memory Test</h2> </header> <div class="question"></div> <footer class="footer"> Keep your brain working! </footer> <script src="app.js"></script> </body> </html>
json { "questions": [ { "question": "How many chairs are there?", "fields": { "a": 1, "b": 2, "c": 3, "d": 4 }, "answer": 1 }, { "question": "How many lights are there?", "fields": { "a": 1, "b": 2, "c": 3, "d": 4 }, "answer": 3 }, { "question": "What is it on the sofa?", "fields": { "a": "person", "b": "stove", "c": "cushions", "d": "Beats me" }, "answer": "cushions" }, { "question": "Where is the light bulb?", "fields": { "a": "desk", "b": "table", "c": "ceiling", "d": "Beats me" }, "answer": "table" }, { "question": "How many questions have you answered?", "fields": { "a": 1, "b": 2, "c": 3, "d": 4 }, "answer": 3 } ] }

試したこと

for分をwhileにして、iを+1する場所を関数の最後に行うなどをしましたが、
上手くいきませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

for文で最初から全部回すではなくて1問ずつ取得&表示させ、
NEXTにイベント付けてクリックで次の問題の出力をするように組み変えるとか?

もしくはCSS等で2問目以降をdisplay:none;にして1問目を回答したら、
1問目を非表示&z-indexを-1にして後ろへ持って行き
2問目をdisplay:block;、z-index:10;とかつけて表示させ…なんて方法もありますね。

以下蛇足です。
古い書き方だと、1問目を出した後にサブループを作って、
その中の条件(NEXTを押す)を満たすまでループを抜けさせない。
というのもあったけど無駄が多いので今では書かれていないとおも…いたい。

投稿2021/03/01 23:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Suffenjoying

2021/03/02 08:28

CSSとaddeventを使って解決しました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問