Ниже я сделал небольшую викторину с 4 вопросами и вопросы 2,3 и 4 скрыты с помощью CSS, но вы можете попробовать удалить стиль из CSS (".pytja2, .pytja3, .pytja4 { display: none;}") чтобы увидеть все вопросы или поставить стиль display: hidden к каждому вопросу по одному и вы их увидите.
Я сделал это, потому что я хотел бы показать следующий вопрос, когда я нажимаю кнопку Следующий, тогда следующий вопрос будет отображаться после того, как я каждый раз нажимаю кнопку Следующий. Но у меня есть проблема с вопросом 2, который не отображается, и он не показывает никаких ошибок в журнале консоли, и я добавил в JavaScript функцию, которая, когда я нажимаю кнопку «Далее», первый вопрос будет скрыт, и он покажет следующий вопрос, но я не знаю, что не так.
<div class = "quiz">
<div id = "pytja1">
<span class = "quest1">I am a ?</span>
<form class = "questions1" action = "">
<input class = "correct" type = "radio" name = "gender" value = "male"> Male<br>
<input type = "radio" name = "gender" value = "female"> Female<br>
<input type = "radio" name = "gender" value = "other"> Other<br>
<input id = "bot" type = "button" value = "Next">
</form>
</div>
<div id = "pytja2">
<span class = "quest2">Football has letters ?</span>
<form class = "questions2" action = "">
<input class = "correct" type = "radio" name = "gender" value = "male"> 7<br>
<input type = "radio" name = "gender" value = "female"> 5<br>
<input type = "radio" name = "gender" value = "other"> 6<br>
<input id = "bot" type = "button" value = "Next">
</form>
</div>
<div id = "pytja3">
<span class = "quest3">VV stands for ?</span>
<form class = "questions3" action = "">
<input type = "radio" name = "gender" value = "male"> BMW <br>
<input class = "correct" type = "radio" name = "gender" value = "female"> Volksvagen<br>
<input type = "radio" name = "gender" value = "other"> Audi<br>
<input id = "bot" type = "button" value = "Next">
</form>
</div>
<div id = "pytja4">
<span class = "quest4">What year it is ?</span>
<form class = "questions4" action = "">
<input type = "radio" name = "gender" value = "male"> 2017<br>
<input type = "radio" name = "gender" value = "female"> 2015<br>
<input class = "correct" type = "radio" name = "gender" value = "other"> 2019<br>
<input id = "bot-submit" type = "submit" value = "Submit">
</form>
</div>
</div>
.quiz{
margin-top: 50px;
margin-left: 40%;
width: 250px;
height: 100px;
background-color: coral;
}
.quest1{
background-color: cadetblue;
padding-right: 50px;
margin-left: 30px;
font-size: 22px;
}
.quest2{
background-color: cadetblue;
padding-right: 50px;
margin-left: 30px;
font-size: 22px;
position: absolute;
top: 3884px;
}
.quest3{
background-color: cadetblue;
padding-right: 50px;
margin-left: 30px;
font-size: 22px;
position: absolute;
top: 3884px;
}
.quest4{
background-color: cadetblue;
padding-right: 50px;
margin-left: 30px;
font-size: 22px;
position: absolute;
top: 3884px;
}
.questions1{
margin-left: 28px;
background-color: cyan;
width: 220px;
padding: 10px;
font-size: 20px;
}
.questions2{
margin-left: 28px;
background-color: red;
width: 150px;
padding: 10px;
font-size: 20px;
position: absolute;
top: 3925px;
}
.questions3{
margin-left: 28px;
background-color: greenyellow;
width: 150px;
padding: 10px;
font-size: 20px;
position: absolute;
top: 3925px;
}
.questions4{
margin-left: 28px;
background-color: olivedrab;
width: 150px;
padding: 10px;
font-size: 20px;
position: absolute;
top: 3925px;
}
.bot{
margin-top: 10px;
}
.pytja2,.pytja3,.pytja4{
display: none;
}
/* End of Quiz*/
let question2 = document.getElementById('pytja2');
let question3 = document.getElementById('pytja3');
let question4 = document.getElementById('pytja4');
let nextQuestion = document.getElementById('bot');
let result = document.getElementById('bot-submit');
nextQuestion.onclick = function () {
if (nextQuestion === question1) {
question1.style.display = 'none'
} else if (nextQuestion === question2) {
question2.style.display = 'block'
}
}
@AlexKudryashev на самом деле это первый вопрос. Его код какой-то беспорядочный и непоследовательный.
Просто из любопытства, но задумывались ли вы об использовании запросов XHR/Ajax для получения следующего вопроса с сервера, когда пользователь нажимает кнопку «Далее», чтобы перейти к следующему вопросу? Затем вы можете заполнить каждый соответствующий div вопросом/ответом, и это не позволит пользователям просматривать ваш исходный код и изменять видимость. Я знаю, что это выходит за рамки того, о чем вы спрашиваете, но может быть пищей для размышлений...
@AlexKudryashev Изменил класс на ID, проверьте :)
@Woodrow Я думал сделать простой проект без Ajax или PHP, потому что я еще не изучил Ajax
Вы можете просто сохранить будущие вопросы в объекте JS и просто генерировать их при нажатии кнопки «Далее». Кроме того, используйте общий класс для похожих элементов, чтобы не повторять свой код — простой тест .quest и .question сократит части вашего кода на 75%.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Итак, похоже, возникла некоторая путаница при использовании bot в качестве селектора ID и селектора CLASS в вашем коде. Я взял на себя смелость почистить это и сделать так, чтобы кнопки «Далее» использовали .bot как class. Если вы собираетесь повторно использовать значение имени в элементе, используйте синтаксис class. ID должен относиться к одному элементу в DOM.
Кроме того, если вы создаете форму для отправки всех ответов, было бы лучше объявить <form> один раз, а затем сделать так, чтобы каждый набор переключателей содержал одно и то же имя для каждого набора вопросов, например (пол, автомобиль и т. д.), поэтому, когда вы обрабатываете форму, будет легко получить выбранные пользователем варианты для каждого набора вопросов.
Я также подчистил часть CSS, чтобы помочь, и добавил цикл for, который привязывает функцию onclick к каждому Next button в форме, поэтому при каждом щелчке он будет проверять parentNode.Id, чтобы увидеть, какие div элементы он должен скрыть и сделать виден для каждого следующего блока вопросов. Этот цикл for достигается путем ссылки на класс .bot с помощью document.querySelectorAll('.bot');
Пожалуйста, дайте мне знать, если у вас есть какие-либо дополнительные вопросы или вам нужно, чтобы я объяснил изменения, которые я внес в приведенный ниже фрагмент:
let question1 = document.getElementById('pytja1');
let question2 = document.getElementById('pytja2');
let question3 = document.getElementById('pytja3');
let question4 = document.getElementById('pytja4');
let result = document.getElementById('bot-submit');
let nextButtons = document.querySelectorAll('.bot');
for (let i = 0; i < nextButtons.length; i++) {
let nextQuestion = nextButtons[i];
nextQuestion.onclick = function() {
switchToNextQuestion(this);
}
}
function switchToNextQuestion(nextQuestion) {
let parentId = nextQuestion.parentNode.id;
if (parentId === 'pytja1') {
question1.style.display = 'none';
question2.style.display = 'block';
} else if (parentId === 'pytja2') {
question2.style.display = 'none';
question3.style.display = 'block';
} else if (parentId === 'pytja3') {
question3.style.display = 'none';
question4.style.display = 'block';
}
}
result.onclick = function() {
alert('I am submitting the quiz!');
}form {
width: 100%;
position: relative;
float: left;
padding-top: 50px;
}
.quiz {
margin: 0px auto;
width: 250px;
height: 100px;
}
.quest1,
.quest2,
.quest3,
.quest4 {
background-color: cadetblue;
font-size: 22px;
}
.questions1 {
margin-left: 28px;
background-color: cyan;
width: 220px;
padding: 10px;
font-size: 20px;
}
.questions2 {
background-color: red;
}
.questions3 {
background-color: greenyellow;
}
.questions4 {
background-color: olivedrab;
}
.bot {
margin-top: 10px;
}
#pytja2,
#pytja3,
#pytja4 {
margin-left: 28px;
display: none;
width: 220px;
padding: 10px;
font-size: 20px;
}
/* End of Quiz*/<form id = "quiz-form">
<div class = "quiz">
<div id = "pytja1" class = "questions1">
<span class = "quest1">I am a ?</span><br/>
<input type = "radio" name = "gender" value = "male" class = "correct"> Male<br/>
<input type = "radio" name = "gender" value = "female"> Female<br/>
<input type = "radio" name = "gender" value = "other"> Other<br/>
<input class = "bot" type = "button" value = "Next" />
</div>
<div id = "pytja2" class = "questions2">
<span class = "quest2">Football has # letters ?</span><br/>
<input type = "radio" name = "football" value = "8" class = "correct"> 8<br/>
<input type = "radio" name = "football" value = "5"> 5<br/>
<input type = "radio" name = "football" value = "6"> 6<br/>
<input class = "bot" type = "button" value = "Next" />
</div>
<div id = "pytja3" class = "questions3">
<span class = "quest3">VW stands for ?</span><br/>
<input type = "radio" name = "car" value = "BMW" /> BMW <br/>
<input type = "radio" name = "car" value = "Volkswagen" class = "correct" /> Volkswagen<br/>
<input type = "radio" name = "car" value = "Audi" /> Audi<br/>
<input class = "bot" type = "button" value = "Next" />
</div>
<div id = "pytja4" class = "questions4">
<span class = "quest4">What year it is ?</span><br/>
<input type = "radio" name = "year" value = "2017" /> 2017<br/>
<input type = "radio" name = "year" value = "2015" /> 2015<br/>
<input type = "radio" name = "year" value = "2019" class = "correct" /> 2019<br/>
<input id = "bot-submit" type = "submit" value = "Submit" />
</div>
</div>
</form>Большое спасибо за вашу помощь и даже рабочий тест, как я планировал, спасибо :) Просто вопрос, почему вы использовали "if (parentId === 'pytja1')", почему вы не использовали кнопку Далее вот так «if (nextButtons === 'pytja1')», спрашивая об этом, потому что мне нужно было сначала нажать кнопку «Далее» и сравнить с «pytja1», «pytja2» и т. д.
Пожалуйста. Причина, по которой я сделал parentId === 'pytja1', заключается в том, что когда вы нажимаете одну из кнопок «Далее», событие onclick затем проверяет, какой родительский узел (<div id = "pytja1">) является кнопкой «Далее». дочерний элемент, чтобы определить, где находится пользователь в шагах викторины. Это позволяет функции определять, как скрыть/показать каждый вопрос по мере продвижения в викторине.
Просто чтобы уточнить, если вы хотите добавить определенные идентификаторы для каждой следующей кнопки, поэтому <input type = "button" id = "next-button-1" class = "bot" value = "Next"/> вы можете ссылаться на значение идентификатора кнопки внутри функции onclick и сравнение с использованием этого значения идентификатора === "next-button-1" вместо просмотра родительского узла, чтобы определить, что нужно скрыть/показать. Несколько разных способов снять шкуру с этого пресловутого кота.
Спасибо, что объяснили :)
Нет элемента с идентификатором
bot. есть элементы сclass = "bot"