Клонировать в HTML через Javascript примеры на умножение
Пока никак не могу освоить правильность работы клонирования в Javascript.
Сделал в HTML-файле код, который генерирует пример на умножение двух цифр от 1 до 10 и по нажатию кнопки "Проверить" выдает результат правильный ли ответ. Код:
<head> Теперь надо, чтобы выдавало допустим сразу 20 разных таких примеров и возле каждого индивидуальная кнопка проверки правильности. При чем, сделать нужно не путем прописывания 20 раз части кода <div></div>, а через Javascript совершить правильно клонирование. |
Проблема в том, что при клонировании будет повторяться одинаковый 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> |
Работает. Спасибо.
Заодно и подачу некоторых операторов в новом виде для себя вижу. Жаль +1 к карме не позволяет добавить |
|
Часовой пояс GMT +3, время: 19:08. |