Показать сообщение отдельно
  #2 (permalink)  
Старый 13.06.2022, 14:58
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,714

Проблема в том, что при клонировании будет повторяться одинаковый id,
а обработчики не клонируются.
Поэтому лучше действовать через class, а не id.
И сначала создать все объекты, а потом пройтись в цикле и все им задать

Как то так
<head>

<title>Математические задания</title>

<meta charset="utf-8">

<style type="text/css">
    </style>

</head>

<body>
    <div class="primer">
        <span class="num1"></span> х
        <span class="num2"></span> =
        <input type="number" class="plus" width="5">
        <input type="button" class="test" value="Проверить" width="5">
        <p class="result"></p>

    </div>

</body>

<script>
const right = 'Правильно';

const not = 'Неправильно';

function count() {
	const parent = this.closest('.primer');
	const plus = Number(parent.querySelector('.plus').value);
	const res = Number(parent.querySelector('.plus').dataset.res);
	parent.querySelector('.result').innerHTML = (res == plus)? right : not;
}

const orig = document.querySelector('.primer');

let num = 19;

while (num--) {
	const clone = orig.cloneNode(true);
	document.body.append(clone);
}

const random = n => Math.round(Math.random() * n);

document.querySelectorAll('.primer').forEach(pr => {
	const num1 = random(10);
	const num2 = random(10);
	pr.querySelector('.num1').innerHTML = num1;
	pr.querySelector('.num2').innerHTML = num2;
	pr.querySelector('.plus').dataset.res = num1 * num2;
	pr.querySelector('.test').onclick = count;
})
</script>
</body>
Ответить с цитированием