Почему у меня не работает код?
В моём опроснике правильный ответ должен красится в зелёный, а неправильный в красный, однако это не происходит: html:
function markAnswer() {
var answers = ["c"];
var radioElements = document.getElementsByName('q1');
var selectedElement;
for (var i = 0; i < Elements.length; i++) {
var element = radioElements[i];
if (element.checked) {
selectedElement = element;
break;
}
}
if (!selectedElement) {
return;
}
for (var i = 0; i < Elements.length; i++) {
var element = radioElements[i];
if (element.value === answers[0]) {
element.parentElement.classList.add("correct");
} else {
element.parentElement.classList.add("incorrect");
}
}
}
.correct {
background-color: #7fff7f;
}
.incorrect {
background-color: #ff7f7f;
}
<h1 class="h13">Ты кого выберешь?</h1>
<form>
<input type="radio" id="q1a" name="q1" value="a">
<label for="q1a">Python</label><br>
<input type="radio" id="q1b" name="q1" value="b">
<label for="q1b">Java</label><br>
<input type="radio" id="q1c" name="q1" value="c">
<label for="q1c">JavaScript</label><br>
<input type="button" value="Ответить" onclick="markAnswer()">
</form>
</div>
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
ответ должен красится в зелёный, а неправильный в красный
Предложу такой вариант... Без циклов.
function markAnswer() {
var answers = ["c"];
const o = document.querySelector('[name="q1"]:checked')
if (!o) return
// если был неправильный ответ
document.querySelector('[name="q1"] + .incorrect')?.classList.remove('incorrect')
const c = o.value === answers[0] ? 'correct' : 'incorrect'
o.nextElementSibling.classList.add(c)
}
.correct {
background-color: #7fff7f;
}
.incorrect {
background-color: #ff7f7f;
}
<h1 class="h13">Ты кого выберешь?</h1>
<form>
<input type="radio" id="q1a" name="q1" value="a">
<label for="q1a">Python</label><br>
<input type="radio" id="q1b" name="q1" value="b">
<label for="q1b">Java</label><br>
<input type="radio" id="q1c" name="q1" value="c">
<label for="q1c">JavaScript</label><br>
<input type="button" value="Ответить" onclick="markAnswer()">
</form>
</div>