Как лучше реализовать тест на JavaScript для проверки знания английскому языку
let test = document.querySelector('#test');
let questions = [
{
text: 'Я программист',
right: 'I',
variant: 'AM',
variant2: 'PROGRAMMER'
},
];
for (let question of questions) {
let div = document.createElement('div');
test.appendChild(div);
let otvet = document.createElement('div');
test.appendChild(otvet);
otvet.classList.add('otvet');
div.classList.add('otvet');
let otvets = document.createElement('div');
test.appendChild(otvets);
otvets.classList.add('otvet');
div.classList.add('otvet');
let div1 = document.createElement('div');
div1.textContent = question.right;
otvet.appendChild(div1);
div1.classList.add('otvet');
let div2 = document.createElement('div');
div2.textContent = question.variant;
otvet.appendChild(div2);
div2.classList.add('otvet');
let div3 = document.createElement('div');
div3.textContent = question.variant2;
otvet.appendChild(div3);
div3.classList.add('otvet');
let p = document.createElement('p');
p.innerHTML = question.text;
div.appendChild(p);
function insert(elem, word) {
let start = elem.selectionStart;
elem.value = elem.value.substring(0, start) + word +
elem.value.substring(elem.selectionEnd, elem.value.length)
elem.focus();
elem.setSelectionRange(start, start + word.length)
}
let input = document.createElement('input');
input.dataset.right = question.right;
let input2 = document.createElement('input');
input2.dataset.variant2 = question.variant2;
let input3 = document.createElement('input');
input3.dataset.variant = question.variant;
div1.addEventListener('click', function() {
insert(input, div1.textContent = question.right)
otvet.removeChild(div1);
otvets.appendChild(input);
});
div2.addEventListener('click', function() {
insert(input2, div2.textContent = question.variant)
otvet.removeChild(div2);
otvets.appendChild(input2);
});
div3.addEventListener('click', function() {
insert(input3, div3.textContent = question.variant2)
otvet.removeChild(div3);
otvets.appendChild(input3);
});
}
let button = document.querySelector('#button');
button.addEventListener('click', function() {
let inputs = document.querySelectorAll('#test input');
for (let input of inputs) {
input.classList.remove('correct');
input.classList.remove('incorrect');
if (input.value == input.dataset.right
) {
input.classList.add('correct');
} else if (input.value == input.dataset.variant) {
input.classList.add('correct');
} else {
input.classList.add('incorrect');
}
}
})
#test div {
margin-bottom: 20px;
margin-left: 30px;
margin-top: 20px;
}
#button {
margin-left: 30px;
}
input {
display: block;
width: 50%;
height: calc(1.5em + .75rem + 2px);
padding: .375rem .75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 2px solid #ced4da;
border-radius: .25rem;
transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
.input2{
display: block;
width: 50%;
height: calc(1.5em + .75rem + 2px);
padding: .375rem .75rem;
font-size: 1rem;
font-weight: 400;
line-height: 1.5;
color: #495057;
background-color: #fff;
background-clip: padding-box;
border: 2px solid #ced4da;
border-radius: .25rem;
transition: border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
#button {
display: inline-block;
font-weight: 400;
text-align: center;
vertical-align: middle;
user-select: none;
color: #fff;
background-color: #007bff;
border-color: #007bff;
padding: .375rem .75rem;
font-size: 1rem;
line-height: 1.5;
border-radius: .25rem;
transition: color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;
}
.otvet{
display:flex;
flex-direction: row;
border: 2px solid;
}
.correct {
border: 2px solid green;
}
.incorrect {
border: 2px solid red;
}
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./style.css">
<title>Россия</title>
</head>
<div id="test"></div>
<button id="button">Проверить</button>
<script src='./index.js'></script>
</body>
Всем доброго вечера. Я начал делать маленькое приложение для изучения английского языка.
Если кратко это должно работать так:
Пользователю предлагается составить несколько английских предложений,
предложения выбираются в рандомном порядке.
Для начала я хотел бы сделать проверку на правильность порядка слов в предложение. Подскажите, пожалуйста, как сделать проверку на правильность результатов по коду.
Буду рад любой помощи.

Ответы (1 шт):
Сам отвечаю на свой вопрос. Я все таки реализовал, то что хотел. Код я представляю в простом варианте.
Что я сделал
Я сделал мини-тест на проверку знаний английского языка. Представлено выражение на русском языке Я программист . Ниже блок с кнопками, нажимая на них-выставляем слова в нужном порядке слова. Далее нажимая на кнопку 'проверка'- происходит проверка на правильность выражения, если слово не правильно- оно подсвечивается красной рамкой.
const questionsRus = ["Я", "программист"]
const questions = ["I'm", "a", "programmer"];
const answers = [];
const text1 = document.querySelector('.vopros-text1');
const text2 = document.querySelector('.vopros-text2');
const text3 = document.querySelector('.vopros-text3');
const text4 = document.querySelector('.otvet-text');
const text5 = document.querySelector('.otvet-text5');
const text6 = document.querySelector('.otvet-text6');
const buttonProverka = document.querySelector('.button__proverka');
const otvet = document.querySelector('.otvet-variant');
const buttonText1 = document.querySelector('.text4');
const buttonText2 = document.querySelector('.text5');
const buttonText3 = document.querySelector('.text6');
//текст кнопок
const textVariant1 = buttonText1.textContent = "programmer";
const textVariant2 = buttonText2.textContent = "a";
const textVariant3 = buttonText3.textContent = "I'm";
const pushed1 = () => {
let res = answers.push(textVariant1);
text4.textContent = textVariant1;
otvet.appendChild(text4);
return res;
}
const pushed2 = () => {
let res = answers.push(textVariant2);
text5.textContent = textVariant2;
otvet.appendChild(text5);
return res;
}
const pushed3 = () => {
let res = answers.push(textVariant3);
text6.textContent = textVariant3;
otvet.appendChild(text6);
return res;
}
buttonText1.addEventListener("click", pushed1);
buttonText2.addEventListener("click", pushed2);
buttonText3.addEventListener("click", pushed3);
text1.textContent = questionsRus[0];
text2.textContent = questionsRus[1];
text3.textContent = questionsRus[2];
const checkAnswers = (a, b) => {
return a.map((item, idx) => item === b[idx]);
}
buttonProverka.addEventListener("click", proverka);
function proverka() {
let res = checkAnswers(answers, questions);
if (res[0] === false) {
text4.classList.add('border-red');
} else {
text4.classList.add('border-green')
};
if (res[1] === false) {
text5.classList.add('border-red');
} else {
text5.classList.add('border-green')
};
if (res[2] === false) {
text6.classList.add('border-red')
} else {
text6.classList.add('border-green')
};
}
.vopros{
display:flex;
margin:10px;
}
.otvet{
display:flex;
}
.border-red{
border:solid 1px red;
}
.border-green{
border:solid 1px green;
}
.otvet-variant{
display:flex;
}
.otvet-text{
margin-right: 10px;
}
.otvet-text5{
margin-right: 10px;
}
.otvet-text6{
margin-right: 10px;
}
.vopros-text1{
margin-right: 10px;
}
.vopros-text2{
margin-right: 10px;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="index.css" type="text/css"/>
</head>
<body>
<div class="vopros">
<p class="vopros-text1"></p>
<p class="vopros-text2"></p>
<p class="vopros-text3"></p>
</div>
<div class="otvet-variant">
<p class="otvet-text"></p>
<p class="otvet-text5"></p>
<p class="otvet-text6 "></p>
</div>
<div class="otvet">
<button class="text4"></button>
<button class="text5"></button>
<button class="text6"></button>
</div>
<button class="button__proverka">Проверить</button>
<script src="./index.js"></script>
</body>
</html>