Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.09.2020, 11:15
Аспирант
Отправить личное сообщение для Alena_03 Посмотреть профиль Найти все сообщения от Alena_03
 
Регистрация: 06.09.2020
Сообщений: 57

Проверка ответов на тест
Всем привет, задание такие: нужно создать тест с тремя видами ответов, инпут, радио кнопка и чекбокс. Проблема с проверкой ответов, не проверяет, т.к не хватает, видимо бока проверки инпутов и радио кнопок, но куда их вставлять не пойму, прошу сделать копипаст моего кода, исправить и добавить нужное и прикрепить, буду благодарна, очень нужно. Мой код:
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Тест 2</title>
<meta charset="utf-8">
<style>
#check {
display: none;
}

#test {
display: none;
}
</style>
</head>
<body background="logo1.png">

<div id="icapt">
    <p id="text"></p>
    <input type="text" id="captchaEdit" value="" />
    <input type="submit" value="Отправить" onClick="checkCaptcha();" />
</div> 

<ul id="test">
	<li class="question">
		Что из перечисленного не является операцией сравнения?
		<ul>
			<li><label><input type="checkbox" data-true>a = b</label></li>
			<li><label><input type="checkbox">a != b</label></li>
			<li><label><input type="checkbox" data-true>a ==== b</label></li>
		</ul>
	</li>
	<li class="question">
		<div id="test">
	<div>
		<p>вопрос 1?</p>
		<input data-right="ответ 1">
	</div>
	<div>
		<p>вопрос 2?</p>
		<input data-right="ответ 2">
	</div>
	<div>
		<p>вопрос 3?</p>
		<input data-right="ответ 3">
	</div>
</div>
Как выглядит однострочный комментарий в JS?
<ul>
<li><label><input type="radio" name="question1" data-true>//</label></li>
<li><label><input type="radio" name="question1">/**/</label></li>
<li><label><input type="radio" name="question1">< !-- --></label></li>
</ul>
</li>
<li class="question">
Что получится, если сложить true + false?
<ul>
<li><label><input type="radio" name="question2">NaN</label></li>
<li><label><input type="radio" name="question2">0</label></li>
<li><label><input type="radio" name="question2" data-true>1</label></li>
</ul>
</li>
	<li class="question">
Выберите то, что является типом данных в JS
<ul>
<li><label><input type="checkbox" data-true>object</label></li>
<li><label><input type="checkbox">num</label></li>
<li><label><input type="checkbox" data-true>null</label></li>
</ul>
</li>
	<input type="button" id="next" value="Следующий вопрос">
	<input type="button" id="check" value="Проверить">
</ul>

<script>
var checkEl = document.getElementById('check');
var nextEl = document.getElementById('next');
var questionsEl = document.getElementsByClassName('question');
var result = [];
var now = 0;
nextEl.addEventListener('click', next);
checkEl.addEventListener('click', checkAnswers);

var c;
function captcha(){
	let a = Math.ceil(Math.random() * 10)
	let b = Math.ceil(Math.random() * 10)
	c = a + b
	document.getElementById('text').innerHTML='Сколько будет ' + a + ' + ' + b + '?';
}

function checkCaptcha(){
	d = document.getElementById('captchaEdit').value;
	if(d == c) {
		alert('Правильный ответ!');
		document.getElementById('icapt').style.display = 'none' 
		document.getElementById('test').style.display = 'block'                  
		showAnswer();
		now++;
	}
	else {
		alert('Неправильный ответ, попробуйте еще раз.')
		captcha()
	}
}



function next() {
	showAnswer();
	now++
	if (!questionsEl[now]) {
		nextEl.style.display = 'none';
		checkEl.style.display = 'block';
	}
}

function showAnswer() {
	for (var i = 0; i < questionsEl.length; i++) {
		questionsEl[i].style.display = 'none';
	}
	questionsEl[now].style.display = 'block';
}

function checkAnswers() {
	for (var i = 0; i < questionsEl.length; i++) {
		var answers = questionsEl[i].querySelectorAll('input[type=checkbox]');
		result.push( checkOneAnswer(answers) );
	}
	printResult();
	result = [];
}

function checkOneAnswer(answers) {
	var result = null;
	var noAnswer = true;
	for (var i = 0; i < answers.length; i++) {
		var isTrue = (answers[i].getAttribute('data-true') !== null);
		if (answers[i].checked) {
			noAnswer = false;
			if (isTrue) {
				result = true;
			} else {
				result = false;
			}
		} else {
		if (isTrue) {
			result = false;
		}
		}
	}
	if (noAnswer) {
		result = null;
	}
	return result;
}

function printResult() {
	var trueAnswers = 0;
	var falseAnswers = 0;
	var noAnswers = 0;
	for (var i = 0; i < result.length; i++) {
		if (result[i] === true) {
			trueAnswers++;
		} else if (result[i] === false) {
			falseAnswers++;
		} else if (result[i] === null) {
			noAnswers++;
		}
	}
	var all = trueAnswers + falseAnswers + noAnswers;
	var percent = Math.round((trueAnswers/all) * 100);
	var msg = 'Правильных ответов: ' + trueAnswers + ' (' + percent + '%)\n'
	+ 'Неправильных ответов: ' + falseAnswers + '\n'
	+ 'Без ответов: ' + noAnswers + '\n';
	alert(msg);
}

captcha();

</script>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 25.09.2020, 12:10
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Это правильно что вы опубликали HTML код тоже, как весь JS-скрипт.

У вас в чём именно проблема? Какой участок вашего кода не работает?
Ответить с цитированием
  #3 (permalink)  
Старый 25.09.2020, 14:59
Аспирант
Отправить личное сообщение для Alena_03 Посмотреть профиль Найти все сообщения от Alena_03
 
Регистрация: 06.09.2020
Сообщений: 57

Faab, считает, будто бы есть только радио, без чекбоксов или наоборот, как будто я не отвечала на них, не проверяет правильность ответов
Ответить с цитированием
  #4 (permalink)  
Старый 25.09.2020, 15:56
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Стр 127
var answers = questionsEl[i].querySelectorAll('input[type=checkbox], input[type=radio]');
Ответить с цитированием
  #5 (permalink)  
Старый 25.09.2020, 18:06
Аспирант
Отправить личное сообщение для Alena_03 Посмотреть профиль Найти все сообщения от Alena_03
 
Регистрация: 06.09.2020
Сообщений: 57

voraa, спасибо огромное
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать математический тренажер. NTG Javascript под браузер 3 22.04.2014 10:36
Тест в php. Некорректный подсчет правильных ответов. KamalovRadik Серверные языки и технологии 1 17.05.2012 03:52
Создать тест с вариантами ответов Anya Общие вопросы Javascript 9 16.12.2011 14:06
Тест с ветвлением Reiter Общие вопросы Javascript 11 08.12.2010 14:50
Проверка выбора только 2 ответов из 4 demon166 Общие вопросы Javascript 6 07.01.2010 01:03