Создание теста

D

Пользователь

от Dizz , в категории: Java , 3 месяца назад

Всех с прошедшими


Ребенку, потребовался сайт для школьного проекта. Я занимался программированием "цать" лет назад. Пришлось поднимать старые архивы покрытые пылью. Кое как смог вспомнить и написать сайт. Благо с дизайном сложностей нет. Однако возникла сложность с которой мне не удается разобраться. Пожалуйста, подсобите, если не сложно.

На сайте обязательно должен быть теск. В интернете, в общем доступе, нашел интересный вариант. Особенно понравился способ вывода результатов теста. Понравился и мне и ребенку. Но. Я уже второй день ломаю голову над одним нюансом - не могу сделать промежуток между вопросом и вариантами ответа и сами вопросы сделать выделенными. Уже мозг вспух.

Вот, собственно сам тест:


<div style="padding: 0px; margin:0.5cm;">

  

<script>

// Заголовок страницы (h2)

var subtitle = "Слова Л.Н. Толстого об образовании";

// Это ваши вопросы

var questions=[

{

text: " - Толстой говорил - Образование это не...:",

answers: ["«как стакан с водой для красок»",

 "«свеча в доме которая горит»",

 "«не заполненное ведро, а зажжение огня»"],

correctAnswer: 2 // нумерация ответов с нуля!

},

{

text: " - Толстой говорил - Образование это не...:",

answers: ["заполняет пустоты мозга",

 "то, что принимается, а то, что дается",

 "сила, которая не пригодится"],

correctAnswer: 1

},

{

text: " - Толстой говорил - Образование это...",

answers: ["развитие способности мыслить",

 "способ устроиться на работу",

 "получать мзду с дураков"],

correctAnswer: 0

},

{

text: "Образование – это не конечный результат:",

answers: ["а, средство обогащения",

 "а бесконечный процесс",

 "а, единовременное явление"],

correctAnswer: 1

}

];


var yourAns = new Array;

var score = 0;


function Engine(question, answer) {yourAns[question]=answer;}


function Score(){

  var answerText = "Результаты:\n";

  for(var i = 0; i < yourAns.length; ++i){

var num = i+1;

answerText=answerText+"\n  Вопрос №"+ num +"";

if(yourAns[i]!=questions[i].correctAnswer){

answerText=answerText+"\n  Правильный ответ: " +

questions[i].answers[questions[i].correctAnswer] + "\n";

 }

else{

answerText=answerText+": Верно! \n";

++score;

}

  }


  answerText=answerText+"\nВсего правильных ответов: "+score+"\n";


  alert(answerText);

  yourAns = [];

  score = 0;

  clearForm("quiz");

}

function clearForm(name) {

  var f = document.forms[name];

  for(var i = 0; i < f.elements.length; ++i) {

if(f.elements[i].checked)

f.elements[i].checked = false;

}

}

</script>

<h3><script>document.write(subtitle)</script></h3>


<form name="quiz">

<script>

for(var q=0; q<questions.length; ++q) {

  var question = questions[q];

  var idx = 1 + q;


  document.writeln('<li><span class="quest">' + question.text + '</span><br>');

  for(var i in question.answers) {

document.writeln('<label><input type=radio name="q' + idx + '" value="' + i +

'" onClick="Engine(' + q + ', this.value)"> ' + question.answers[i] + '</label><br>');

}

document.writeln('</li>');


}

</script>


<center><input type="button" align="right" onClick="Score()" value="Проверить результаты"></center>

</form>

  

</div>

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

D

Пользователь

от Dizz , 3 месяца назад

@Dizz 

Нашел ответ: вопрос решает таблица стилей и небольшое дополнение в блок теста.


Вверху HTML пишем так:

<head>

<style>

.form {

 margin: 16px; /* отступы вокруг */

}

.form h2 {

 font-size: 18px; /* размер шрифта заголовка */

}

.form .quest {

 display: block;

 margin-top: 5px; /* отступ сверху */

 margin-bottom: 10px; /* отступ снизу */

 font-weight: bold; /* выделение жирным заголовка блока*/

}

.form label {

 display: block; /* чтобы не вставлять br в конце, label делаем блочным */

}

.form input[type=button] {

 display: block;

 margin: 20px auto; /* 20px - отступ кнопки по вертикали; auto - выравнивание по центру по горизонтали */

}

</style>


Далее размещаем этот блок с исправлением в нужном месте:


<script>


// Заголовок страницы (h2)

var subtitle = "Слова Л.Н. Толстого об образовании";

// Это ваши вопросы

var questions=[

{

text: " - Толстой говорил - Образование это не...:",

answers: ["«как стакан с водой для красок»",

"«свеча в доме которая горит»",

"«не наполнение ведра, а зажжение огня»"],

correctAnswer: 2 // нумерация ответов с нуля!

},

{

text: " - Толстой говорил - Образование это не...:",

answers: ["заполнение пустот мозга",

"то, что принимается, а то, что дается",

"сила, которая не пригодится"],

correctAnswer: 1

},

{

text: " - Толстой говорил - Образование это...",

answers: ["развитие способности мыслить",

"способ устроиться на работу",

"получать мзду с дураков"],

correctAnswer: 0

},

{

text: "Образование – это не конечный результат:",

answers: ["а, средство обогощения",

"а бесконечный процесс",

"а, единовременное явление"],

correctAnswer: 1

}


];


var yourAns = new Array;

var score = 0;


function Engine(question, answer) {yourAns[question]=answer;}


function Score(){

var answerText = "Результаты:\n";

for(var i = 0; i < yourAns.length; ++i){

var num = i+1;

answerText=answerText+"\n Вопрос №"+ num +"";

if(yourAns[i]!=questions[i].correctAnswer){

answerText=answerText+"\n Правильный ответ: " +

questions[i].answers[questions[i].correctAnswer] + "\n";

}

else{

answerText=answerText+": Верно! \n";

++score;

}

}


answerText=answerText+"\nВсего правильных ответов: "+score+"\n";


alert(answerText);

yourAns = [];

score = 0;

clearForm("quiz");

}

function clearForm(name) {

var f = document.forms[name];

for(var i = 0; i < f.elements.length; ++i) {

if(f.elements[i].checked)

f.elements[i].checked = false;

}


}

</script>


<form name="quiz" class="form">

<h2><script>document.write(subtitle)</script></h2>


<script>

document.writeln('<ol>');

for(var q=0; q<questions.length; ++q) {

var question = questions[q];

var idx = 1 + q;


document.write('<li><span class="quest">' + question.text + '</span>');

for(var i in question.answers) {

document.writeln('<label><input type=radio name="q' + idx + '" value="' + i +

'" onClick="Engine(' + q + ', this.value)"> ' + question.answers[i] + '</label>');

}

document.writeln('</li>');


}

document.writeln('</ol>');

</script>


<input type="button" onClick="Score()" value="Проверить результаты">

</form>


Все будет работать.

Надеюсь мои мытарства с этим видом теста кому-нибудь пригодятся в будущем. Удачи всем и спасибо!