Всех с прошедшими
Ребенку, потребовался сайт для школьного проекта. Я занимался программированием "цать" лет назад. Пришлось поднимать старые архивы покрытые пылью. Кое как смог вспомнить и написать сайт. Благо с дизайном сложностей нет. Однако возникла сложность с которой мне не удается разобраться. Пожалуйста, подсобите, если не сложно.
На сайте обязательно должен быть теск. В интернете, в общем доступе, нашел интересный вариант. Особенно понравился способ вывода результатов теста. Понравился и мне и ребенку. Но. Я уже второй день ломаю голову над одним нюансом - не могу сделать промежуток между вопросом и вариантами ответа и сами вопросы сделать выделенными. Уже мозг вспух.
Вот, собственно сам тест:
<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>
@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>
Все будет работать.
Надеюсь мои мытарства с этим видом теста кому-нибудь пригодятся в будущем. Удачи всем и спасибо!