Помогите, пожалуйста Делается тест, в рамках которого после нажатия кнопки происходит проверка корректности ответа и правильные ответы выделяются зеленым, а неправильные - красным.
Необходимо поменять данную ситуацию таким образом, чтобы только отмеченные чекбоксы показывали правильный это ответ или нет
(например, выбран 1 и 3, выделяются 1 как неправильно и 3 как правильно)
Есть код Часть HTML разметки:
<div class="test" id="m1_q1">
<p>Вопрос 1</p>
<div class="answer-1">
<input type="checkbox" class="wrong_1" name="customCheck1" id="customCheck_m1_q1_a1">
<label class="wrong_1" for="customCheck_m1_q1_a1">
<p class="answer-wrong">неверный ответ</p>
</label>
</div>
<div class="answer-1">
<input type="checkbox" class="wrong_1" name="customCheck1" id="customCheck_m1_q1_a2">
<label class="wrong_1" for="customCheck_m1_q1_a2">
<p class="answer-wrong">неверный ответ</p>
</label>
</div>
<div class="answer-1">
<input type="checkbox" class="wright_1" name="customCheck1" id="customCheck_m1_q1_a3">
<label class="wright_1" for="customCheck_m1_q1_a3">
<p class="answer-wright">верный ответ</p>
</label>
</div>
<div class="answer-1">
<input type="checkbox" class="wright_1" name="customCheck1" id="customCheck_m1_q1_a4">
<label class="wright_1" for="customCheck_m1_q1_a4">
<p class="answer-wright">верный ответ</p>
</label>
</div>
<button class="btn-check" onclick="CheckAnswer1();">Проверить ответ</button>
</div>
JS:
const btnCheckAnswer = document.querySelectorAll('.btn-check'),
WrightAnswers = document.querySelectorAll('.answer-wright'),
WrongAnswers = document.querySelectorAll('.answer-wrong');
scoreM1 = 0;
function CheckAnswer1() {
const answer1 = document.querySelectorAll('.answer-1');
let counts = $("input.wright_2:checked").length;
if ($("input.wrong_1").is(':checked')) {
for (let i = 0; i < answer1.length; i++) {
answer1[i].classList.add('disabled');
}
btnCheckAnswer[0].classList.add('disabled');
WrightAnswers[0].classList.add('color-green-100');
WrightAnswers[1].classList.add('color-green-100');
WrongAnswers[0].classList.add('color-red-100');
WrongAnswers[1].classList.add('color-red-100');
return;
} else if (counts == 2) {
for (let i = 0; i < answer1.length; i++) {
answer1[i].classList.add('disabled');
}
btnCheckAnswer[0].classList.add('disabled');
WrightAnswers[0].classList.add('color-green-100');
WrightAnswers[1].classList.add('color-green-100');
WrongAnswers[0].classList.add('color-red-100');
WrongAnswers[1].classList.add('color-red-100');
scoreM1 += 1;
return;
} else if (counts > 0 && counts < 2) {
for (let i = 0; i < answer1.length; i++) {
answer1[i].classList.add('disabled');
}
btnCheckAnswer[0].classList.add('disabled');
WrightAnswers[0].classList.add('color-green-100');
WrightAnswers[1].classList.add('color-green-100');
WrongAnswers[0].classList.add('color-red-100');
WrongAnswers[1].classList.add('color-red-100');
return;
} else {
alert('Выбери ответ!');
}
}
В СSS просто прописаны стили, в частности
.color-red-100 {
color:red;
text-decoration:line-through;
}
.color-green-100 {
color:green;
}
Заранее большое спасибо=)
Самый простой способ вам помочь - задействовать стили только для лейблов, находящихся после зачекнутых чекбоксов. Понадобятся только минимальные изменения в CSS:
.answer-1 input:checked + label .color-red-100 {
color: red;
text-decoration: line-through;
}
.answer-1 input:checked + label .color-green-100 {
color: green;
}
Ну а по-хорошему, надо это ваше скриптовое безобразие переписать, убрав ошибки и оптимизировав код.
const btnCheckAnswer = document.querySelectorAll('.btn-check'),
WrightAnswers = document.querySelectorAll('.answer-wright'),
WrongAnswers = document.querySelectorAll('.answer-wrong');
scoreM1 = 0;
function CheckAnswer1() {
const answer1 = document.querySelectorAll('.answer-1');
let counts = $("input.wright_2:checked").length;
if ($("input.wrong_1").is(':checked')) {
for (let i = 0; i < answer1.length; i++) {
answer1[i].classList.add('disabled');
}
btnCheckAnswer[0].classList.add('disabled');
WrightAnswers[0].classList.add('color-green-100');
WrightAnswers[1].classList.add('color-green-100');
WrongAnswers[0].classList.add('color-red-100');
WrongAnswers[1].classList.add('color-red-100');
return;
} else if (counts == 2) {
for (let i = 0; i < answer1.length; i++) {
answer1[i].classList.add('disabled');
}
btnCheckAnswer[0].classList.add('disabled');
WrightAnswers[0].classList.add('color-green-100');
WrightAnswers[1].classList.add('color-green-100');
WrongAnswers[0].classList.add('color-red-100');
WrongAnswers[1].classList.add('color-red-100');
scoreM1 += 1;
return;
} else if (counts > 0 && counts < 2) {
for (let i = 0; i < answer1.length; i++) {
answer1[i].classList.add('disabled');
}
btnCheckAnswer[0].classList.add('disabled');
WrightAnswers[0].classList.add('color-green-100');
WrightAnswers[1].classList.add('color-green-100');
WrongAnswers[0].classList.add('color-red-100');
WrongAnswers[1].classList.add('color-red-100');
return;
} else {
alert('Выбери ответ!');
}
}
.answer-1 input:checked+label .color-red-100 {
color: red;
text-decoration: line-through;
}
.answer-1 input:checked+label .color-green-100 {
color: green;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="test" id="m1_q1">
<p>Вопрос 1</p>
<div class="answer-1">
<input type="checkbox" class="wrong_1" name="customCheck1" id="customCheck_m1_q1_a1">
<label class="wrong_1" for="customCheck_m1_q1_a1">
<p class="answer-wrong">неверный ответ</p>
</label>
</div>
<div class="answer-1">
<input type="checkbox" class="wrong_1" name="customCheck1" id="customCheck_m1_q1_a2">
<label class="wrong_1" for="customCheck_m1_q1_a2">
<p class="answer-wrong">неверный ответ</p>
</label>
</div>
<div class="answer-1">
<input type="checkbox" class="wright_1" name="customCheck1" id="customCheck_m1_q1_a3">
<label class="wright_1" for="customCheck_m1_q1_a3">
<p class="answer-wright">верный ответ</p>
</label>
</div>
<div class="answer-1">
<input type="checkbox" class="wright_1" name="customCheck1" id="customCheck_m1_q1_a4">
<label class="wright_1" for="customCheck_m1_q1_a4">
<p class="answer-wright">верный ответ</p>
</label>
</div>
<button class="btn-check" onclick="CheckAnswer1();">Проверить ответ</button>
</div>
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Установил базовый скрипт jquery step basic example
Есть такой кодОн отправляет запрос на бекенд, который должен вернуть просто html-код, что он и делает: