#javascript #html #css
Вопрос:
Не мог бы кто-нибудь, пожалуйста, исправить мой JS-код и рассказать мне, что было сделано для этого? Мне было интересно, что я сделал неправильно, что привело к тому, что мои вопросы викторины и ее альтернативы не отображаются внутри центрального div.
Контекстуализация моего кода: это форма с двумя вопросами, и ее результаты должны отображаться в верхней части страницы после нажатия кнопки «Оценить», однако сейчас я сосредоточен на том, чтобы понять, как можно сделать тест видимым на странице HTML/CSS.
Ссылка на CodePen: Мой фрагмент кода
const quizQuestions = {
questions = {
question: "What is the of the state of Pará?",
alternatives: {
0: "São Paulo",
1: "Guarulhos",
2: "Campinas",
3: "São Bernardo do Campo",
4: "São José dos Campos",
5: "Santo André",
6: "Ribeirão Preto",
7: "Belém",
answer: "7"
},
{
question: "What is the capital of the state of Amapá?",
alternatives: {
0: "Osasco",
1: "Sorocaba",
2: "Mauá",
3: "Macapá",
4 "São José do Rio Preto",
5: "Mogi das Cruzes",
6: "Santos",
answer: "3"
};
document.getElementByClassName('.quiz-container ').addEventListener('click', function() {
let container =
document.querySelector('.quiz-container');
container.innerHTML = '<div class="quiz-container"></div>';
for (const [key, value] of Object.entries(quizQuestion.alternatives)) {
container.innerHTML = `<input type="radio" name="choice" value="${key}"> ${value}`;
}
container.innerHTML = '<div><button type="submit" id="submit-button">Evaluate</button></div>';
document.getElementById('submit2').addEventListener('click', function(event) {
console.log('asdf');
event.preventDefault();
var selected = document.querySelector('input[type="radio"]:checked');
if (selected amp;amp; selected.value == quizQuestion.answer) {
alert('It is super, super correct :D!');
} else {
alert('Unfortunately, it is incorrect :(!');
}
});
});
body {
background: rgb(209, 29, 83);
margin: 0;
}
h1 {
background: rgb(255, 184, 201);
height: 60px;
margin: 0;
padding-left: 20px;
padding-top: 20px;
font-size: 45px;
text-shadow: 3px 3px 9px;
color: rgb(43, 29, 14);
}
.quiz-container {
text-align: left;
font-size: 25px;
background: rgb(255, 209, 220);
width: 700px;
height: 4000px;
margin: auto;
margin-top: 100px;
box-shadow: 9px 9px 10px;
margin-bottom: 60px;
}
button {
margin-left: 900px;
padding-top: 0;
margin-bottom: 60px;
}
.questions {
color: #000000;
text-align: center;
font-size: 15px;
}
<head>
<h1>QUIZ centred in Brazil</h1>
</head>
<body>
<div class="quiz-container"></div>
<div>
<button type="submit" id="submit-button">Evaluate</button>
</div>
<script src="js/main.js"></script>
</body>
Комментарии:
1. Похоже, у вас серьезное недопонимание разницы между объектами и массивами в JavaScript. Почему вы выбрали модель
quizQuestions
в качестве объекта, а не массива? Вы также забыли закрыть свой первыйquestion
с помощью закрывающей фигурной скобки}
, но вы увидите более неожиданное поведение из-за ваших дублирующих ключейquizQuestions
.2. Отсутствует двоеточие (:) здесь после 4:
4 "São José do Rio Preto",
3. У вас есть 10 открывающих фигурных скобок и только 7 закрывающих фигурных скобок, пары правильно соответствуют вашей функции, поэтому в вашем объявлении const [которое, как сказал @esqew, должно быть в основном массивами, а не всеми объектами] есть 2 закрывающие фигурные скобки, но 5 открывающих.
4. вы действительно хотели иметь контейнер для вопросов размером 4000 пикселей? Я бы предложил разрешить браузеру обрабатывать высоту контейнера и не заставлять людей прокручивать около 4 окон, если они не заполнены.
5. @Andrew Мои представления об измерениях не самые лучшие 🙁 . Это может показаться глупым, но я определил бит 4000px в своем CSS-коде, потому что я был обеспокоен тем, что мой JS-код не подходит.
Ответ №1:
В вашем коде много проблем.
Первая проблема quizQuestions
заключается в том, что вы неправильно структурированы. Они должны представлять собой массив объектов, каждый из которых содержит вопрос, массив альтернатив и ответ — я исправил это во фрагменте.
Вторая проблема связана с тем, как вы получаете элемент — уникальные элементы должны иметь уникальные id
s, не используйте такие классы — вот document.getElementByClassName
почему их не существует, потому что это было document.getElementsByClassName
бы так, поскольку классы не уникальны, как идентификаторы. У вас также есть a .
, который подходит для селектора css или для jquery, но не используется в этой форме получения — я обновил его, чтобы использовать идентификатор, исправив ваш css для соответствия.
Я не уверен, как вы пытались сделать что — то из того, что вы делали, но это должно быть приемлемой отправной точкой, чтобы вы снова начали двигаться-я не включил часть проверки вопросов, так как этого было достаточно, чтобы заполнить поле, как вы просили.
const quizQuestions = [{
question: "What is the of the state of Pará?",
alternatives: [
"São Paulo",
"Guarulhos",
"Campinas",
"São Bernardo do Campo",
"São José dos Campos",
"Santo André",
"Ribeirão Preto",
"Belém"
],
answer:7
},{
question: "What is the capital of the state of Amapá?",
alternatives: [
"Osasco",
"Sorocaba",
"Mauá",
"Macapá",
"São José do Rio Preto",
"Mogi das Cruzes",
"Santos"
],
answer:3
}];
window.onload = function (){
const container = document.getElementById('quiz-container');
quizQuestions.forEach((question, number) => {
let questionHTML = `<div class="question"><h3>${question.question}</h3>`;
question.alternatives.forEach((value, key) => {
questionHTML = `<input type="radio" name="${number}choice" value="${key}">${value}<br />`;
});
questionHTML = "</div>";
container.innerHTML = questionHTML;
});
};
body {
background: rgb(209, 29, 83);
margin: 0;
}
h1 {
background: rgb(255, 184, 201);
height: 60px;
margin: 0;
padding-left: 20px;
padding-top: 20px;
font-size: 45px;
text-shadow: 3px 3px 9px;
color: rgb(43, 29, 14);
}
#quiz-container {
text-align: left;
font-size: 25px;
background: rgb(255, 209, 220);
width: 700px;
height: 4000px;
margin: auto;
margin-top: 100px;
box-shadow: 9px 9px 10px;
margin-bottom: 60px;
}
button {
margin-left: 900px;
padding-top: 0;
margin-bottom: 60px;
}
.question {
color: #000000;
text-align: center;
font-size: 15px;
}
<head>
<h1>QUIZ centred in Brazil</h1>
</head>
<body>
<div id="quiz-container"></div>
<div>
<button type="submit" id="submit-button">Evaluate</button>
</div>
<script src="js/main.js"></script>
</body>