#javascript #html #forms
Вопрос:
Я хочу сделать тест с использованием html/js, и я не знаю, как изменить значения в форме, чтобы добавить больше вопросов и перемещаться между ними, теперь это очень просто:
HTML:
<form name="quiz">
<input type="radio" name="q1" value="a" id="q1"><br>
<input type="radio" name="q1" value="b" id="q1"><br>
<input type="radio" name="q1" value="c" id="q1"><br>
<input type="radio" name="q1" value="d" id="q1"><br>
</form>
<button onclick="submitAnswers()">Check Answer</button>
JS:
const answers = ["b","a"];
function submitAnswers() {
let q1 = document.forms["quiz"]["q1"].value;
if (q1 == answers[0]) {
console.log('Correct answer');
} else {
console.log('Incorrect answer');
}
}
И я хочу сделать кнопки навигации, чтобы я мог перейти к следующему или предыдущему вопросу, и кнопки с цифрами, чтобы я мог переходить между вопросами, и я хочу, чтобы он сохранял ответ, поэтому, например, если я проверю ответ в вопросе 1 и перейду к вопросу 15, я могу вернуться к вопросу 1 и выбрать ответ, но я понятия не имею, как начать и сделать что-либо из этого…
Есть какие-нибудь намеки?
Комментарии:
1. У вас не может быть разных элементов с одним и тем же идентификатором. Также вы не можете выбрать несколько элементов с помощью радио
Ответ №1:
Таким образом, вы хотите получить элементы ввода форм с formData
последующим циклом по их записям, сохранить ответы в объекте.
HTML
<form id="quiz">
<div>
<label>
<input type="radio" id="a" name="q1" value="a">
A
</label>
</div>
<div>
<label>
<input type="radio" id="b" name="q1" value="b">
B
</label>
</div>
<div>
<label>
<input type="radio" id="c" name="q1" value="c">
C
</label>
</div>
<div>
<label>
<input type="radio" id="d" name="q1" value="d">
D
</label>
</div>
<button type="submit">Check Answer</button>
</form>
JS
const form = document.getElementById('quiz');
const answers = {
'q1': ["b","a"],
}
form.addEventListener('submit', function(event) {
event.preventDefault();
const formData = new FormData(form);
for (var pair of formData.entries()) {
// pair[0] is the input name, pair[1] is the value.
if (answers[pair[0]].includes(pair[1])) {
console.log('correct')
} else {
console.log('incorrect')
}
}
})
Комментарии:
1. Переключатели не могут иметь несколько значений. developer.mozilla.org/en-US/docs/Web/HTML/Element/input/radio
2. @Стив, он не стремится к нескольким значениям, он стремится к одному. радио имеет единственное значение, в противном случае Его ответы могут быть 1 или другим. Не оба, следовательно, включают в себя.