Múltipla Escolha
Apresenta uma pergunta com múltiplas opções de resposta, sendo uma ou mais corretas. O aprendiz recebe feedback imediato após a tentativa.
Experimente
Qual das alternativas descreve corretamente o papel dos distratores em uma questão de múltipla escolha?
Código-fonte
Dados de exemplo
Define a pergunta e as alternativas de exemplo.
| 1 |
<?php
|
| 2 |
$pergunta = 'Quais destas opções são frutas?';
|
| 3 |
$opcoes = [
|
| 4 |
['texto' => 'Maçã', 'correta' => true],
|
| 5 |
['texto' => 'Cenoura', 'correta' => false],
|
| 6 |
['texto' => 'Banana', 'correta' => true],
|
| 7 |
['texto' => 'Batata', 'correta' => false],
|
| 8 |
];
|
| 9 |
?>
|
Estrutura da pergunta e das opções
Monta o HTML da pergunta e dos botões de resposta.
| 1 |
<div class="questao" data-tipo="multipla-escolha">
|
| 2 |
|
| 3 |
<p class="questao-pergunta"><?= htmlspecialchars($pergunta) ?></p>
|
| 4 |
|
| 5 |
<div class="questao-opcoes">
|
| 6 |
<?php foreach ($opcoes as $opcao): ?>
|
| 7 |
<button type="button"
|
| 8 |
class="questao-opcao"
|
| 9 |
data-correta="<?= $opcao['correta'] ? 'true' : 'false' ?>"
|
| 10 |
data-selecionada="false">
|
| 11 |
<?= htmlspecialchars($opcao['texto']) ?>
|
| 12 |
</button>
|
| 13 |
<?php endforeach; ?>
|
| 14 |
</div>
|
| 15 |
|
| 16 |
<button type="button" class="questao-verificar">Verificar resposta</button>
|
| 17 |
|
| 18 |
<div class="questao-feedback" hidden></div>
|
| 19 |
<button type="button" class="questao-reset" hidden>Tentar novamente</button>
|
| 20 |
|
| 21 |
</div>
|
Opção da questão
Estilo base do botão de alternativa.
| 1 |
.questao-opcao {
|
| 2 |
display: block;
|
| 3 |
width: 100%;
|
| 4 |
padding: 12px 16px;
|
| 5 |
margin-bottom: 8px;
|
| 6 |
border: 2px solid #d1d5db;
|
| 7 |
border-radius: 8px;
|
| 8 |
background: #fff;
|
| 9 |
cursor: pointer;
|
| 10 |
transition: border-color 0.2s, background-color 0.2s;
|
| 11 |
}
|
| 12 |
|
| 13 |
.questao-opcao:hover {
|
| 14 |
border-color: #6366f1;
|
| 15 |
}
|
Opção selecionada
Destaca a alternativa marcada antes de verificar.
| 1 |
.questao-opcao.selecionada {
|
| 2 |
border-color: #6366f1;
|
| 3 |
background: #eef2ff;
|
| 4 |
}
|
Resultado da verificação
Colore a alternativa como certa ou errada.
| 1 |
.questao-opcao.acerto {
|
| 2 |
border-color: #22c55e;
|
| 3 |
background: #f0fdf4;
|
| 4 |
}
|
| 5 |
|
| 6 |
.questao-opcao.erro {
|
| 7 |
border-color: #ef4444;
|
| 8 |
background: #fef2f2;
|
| 9 |
}
|
Encontrar os elementos da questão
Localiza os elementos da questão no DOM.
| 1 |
document.addEventListener('DOMContentLoaded', function () {
|
| 2 |
document.querySelectorAll('.questao[data-tipo="multipla-escolha"]').forEach(function (questao) {
|
| 3 |
var opcoes = questao.querySelectorAll('.questao-opcao');
|
| 4 |
var verificar = questao.querySelector('.questao-verificar');
|
| 5 |
var feedback = questao.querySelector('.questao-feedback');
|
| 6 |
var reset = questao.querySelector('.questao-reset');
|
| 7 |
var respondida = false;
|
Marcar uma opção
Alterna a seleção da opção clicada.
| 1 |
opcoes.forEach(function (opcao) {
|
| 2 |
opcao.addEventListener('click', function () {
|
| 3 |
if (respondida) return;
|
| 4 |
var jaMarcada = opcao.dataset.selecionada === 'true';
|
| 5 |
opcao.dataset.selecionada = jaMarcada ? 'false' : 'true';
|
| 6 |
opcao.classList.toggle('selecionada', !jaMarcada);
|
| 7 |
});
|
| 8 |
});
|
Verificar a resposta
Compara a seleção com o gabarito e mostra o resultado.
| 1 |
verificar.addEventListener('click', function () {
|
| 2 |
if (respondida) return;
|
| 3 |
respondida = true;
|
| 4 |
|
| 5 |
var tudoCerto = true;
|
| 6 |
|
| 7 |
opcoes.forEach(function (opcao) {
|
| 8 |
opcao.disabled = true;
|
| 9 |
|
| 10 |
var correta = opcao.dataset.correta === 'true';
|
| 11 |
var marcada = opcao.dataset.selecionada === 'true';
|
| 12 |
|
| 13 |
if (marcada && correta) {
|
| 14 |
opcao.classList.add('acerto');
|
| 15 |
} else if (marcada && !correta) {
|
| 16 |
opcao.classList.add('erro');
|
| 17 |
tudoCerto = false;
|
| 18 |
}
|
| 19 |
if (correta && !marcada) {
|
| 20 |
tudoCerto = false;
|
| 21 |
}
|
| 22 |
});
|
| 23 |
|
| 24 |
feedback.textContent = tudoCerto
|
| 25 |
? 'Correto! Você marcou todas as alternativas certas.'
|
| 26 |
: 'Não foi dessa vez. As respostas corretas estão destacadas.';
|
| 27 |
feedback.hidden = false;
|
| 28 |
|
| 29 |
verificar.hidden = true;
|
| 30 |
reset.hidden = false;
|
| 31 |
});
|
Reiniciar
Restaura o estado inicial da questão.
| 1 |
reset.addEventListener('click', function () {
|
| 2 |
respondida = false;
|
| 3 |
|
| 4 |
opcoes.forEach(function (opcao) {
|
| 5 |
opcao.disabled = false;
|
| 6 |
opcao.dataset.selecionada = 'false';
|
| 7 |
opcao.classList.remove('selecionada', 'acerto', 'erro');
|
| 8 |
});
|
| 9 |
|
| 10 |
feedback.hidden = true;
|
| 11 |
reset.hidden = true;
|
| 12 |
verificar.hidden = false;
|
| 13 |
});
|