Как размножить HTML-код и функцию через Javascript?
Для кого-то может это вопрос 1-го класса, но я уже не первый день не могу придумать как реализовать.
Реализована задачка, когда генерируется два рандомных числа от 1 до 10 и предлагается ввести ответ их суммы, а кнопкой проверить правильность. Возможно, указанный мной код можно было иначе составить.
<head>
<title>Математические задания</title>
</head>
<body>
<div id="primer">
<span id="inp_1"></span> +
<span id="inp_2"></span> =
<input type="number" id="plus" width="5">
<button onclick="multi()">Проверить</button>
<p id="result"></p>
</div>
</body>
<script type="text/javascript">
var multi_1;
multi_1 = Math.round(Math.random()*10);
multi_1 = document.getElementById('inp_1').innerHTML = multi_1;
var multi_2;
multi_2 = Math.round(Math.random()*10);
multi_2 = document.getElementById('inp_2').innerHTML = multi_2;
result1 = multi_1 + multi_2;
result = document.getElementById('result');
function multi()
{
check = document.querySelector('input').value;
if (result1 == check)
result.innerHTML = "Правильно";
else
result.innerHTML = "Неправильно";
}
</script>
А теперь нужно, чтобы таких примеров было, скажем, пять. Как при помощи Javascript это реализовать, чтобы не вручную пять раз копировать куски кода? То есть, число1 + число2 = input [Проверить данный ответ] число1 + число2 = input [Проверить данный ответ] число1 + число2 = input [Проверить данный ответ] число1 + число2 = input [Проверить данный ответ] число1 + число2 = input [Проверить данный ответ] Догадываюсь, что при помощи цикла и массивов, но правильно код так и не смог собрать. |
igorzyden,
избавьтесь от id. |
Цитата:
И каким образом это размножит? |
igorzyden,
<head>
<title>Математические задания</title>
<meta charset="utf-8">
</head>
<body>
<div class="primer">
<span class="num"></span> +
<span class="num"></span> =
<input type="number" class="plus" width="5">
<button type="button">Проверить</button>
<p class="result"></p>
</div>
<div class="primer">
<span class="num"></span> +
<span class="num"></span> =
<input type="number" class="plus" width="5">
<button type="button">Проверить</button>
<p class="result"></p>
</div>
<div class="primer">
<span class="num"></span> +
<span class="num"></span> =
<input type="number" class="plus" width="5">
<button type="button">Проверить</button>
<p class="result"></p>
</div>
</body>
<script>
const random = n => Math.round(Math.random() * n);
document.querySelectorAll('.primer').forEach(div => {
let sum = 0;
div.querySelectorAll('.num').forEach(span => {
let num = random(10);
span.textContent = num;
sum += num;
})
let input = div.querySelector('.plus'),
button = div.querySelector('button'),
result = div.querySelector('.result');
button.addEventListener('click', _ => result.textContent = input.value == sum ? 'Правильно' : 'Неправильно')
})
</script>
|
рони,
в плане результата, спасибо, работает. Но по реализации, получается без копирования вручную участка кода <div class="primer">....</div> вообще не обойтись и при помощи, например, цикла Javascript это не заменить? И если бы примеров нужно было бы 100, то значит нужно 100 раз вручную копировать ту часть кода? |
igorzyden,
клонируйте блок сколько вам нужно в строке 31 |
igorzyden,
<head>
<title>Математические задания</title>
<meta charset="utf-8">
<style type="text/css">
body{
counter-reset: num 0;
}
.primer:before{
counter-increment: num ;
content: counter(num)'. ';}
</style>
</head>
<body>
<div class="primer">
<span class="num"></span> +
<span class="num"></span> =
<input type="number" class="plus" width="5">
<button type="button">Проверить</button>
<p class="result"></p>
</div>
</body>
<script>
const random = n => Math.round(Math.random() * n);
let block = document.querySelector('.primer');
let length = 99;
let arr = Array.from({length}, _ => block.cloneNode(true));
document.body.append(...arr);
document.querySelectorAll('.primer').forEach(div => {
let sum = 0;
div.querySelectorAll('.num').forEach(span => {
let num = random(10);
span.textContent = num;
sum += num;
})
let input = div.querySelector('.plus'),
button = div.querySelector('button'),
result = div.querySelector('.result');
button.addEventListener('click', _ => result.textContent = input.value == sum ? 'Правильно' : 'Неправильно')
})
</script>
|
Супер.
Спасибо |
Походу совсем туго у меня с соображалкой, но мозг уже сломал и не придумал как сделать следующее.
Теперь надо чтобы в текущем коде генерируемые суммы двух цифр были не больше 10. То есть, если генерируется 4+7 и т.п., то значит этот пример не подходит и надо чтобы вместо него сгенерировался другой. Ну и понятно, чтобы все примеры соответствовали требованием и количество примеров задавалось клонированием. |
Цитата:
<!DOCTYPE html>
<html>
<head>
<title>Математические задания</title>
<meta charset="utf-8">
<style type="text/css">
body {
counter-reset: num 0;
}
.primer:before {
counter-increment: num;
content: counter(num)'. ';
}
</style>
</head>
<body>
<div class="primer">
<span class="num"></span> +
<span class="num"></span> =
<input type="number" class="plus" width="5">
<button type="button">Проверить</button>
<p class="result"></p>
</div>
<script>
const random = n => Math.round(Math.random() * n);
const total = n => {
let a = random(n),
b = random(n - a);
return [a, b]
};
let block = document.querySelector('.primer');
let length = 99;
let arr = Array.from({
length
}, _ => block.cloneNode(true));
document.body.append(...arr);
document.querySelectorAll('.primer').forEach(div => {
let sum = 0,
num = total(10);
div.querySelectorAll('.num').forEach((span, i) => {
span.textContent = num[i];
sum += num[i];
})
let input = div.querySelector('.plus'),
button = div.querySelector('button'),
result = div.querySelector('.result');
button.addEventListener('click', _ => result.textContent = input.value == sum ? 'Правильно' : 'Неправильно')
})
</script>
</body>
</html>
|
igorzyden,
или так
<!DOCTYPE html>
<html>
<head>
<title>Математические задания</title>
<meta charset="utf-8">
<style type="text/css">
body {
counter-reset: num 0;
}
.primer:before {
counter-increment: num;
content: counter(num)'. ';
}
</style>
</head>
<body>
<div class="primer">
<span class="num"></span> +
<span class="num"></span> =
<input type="number" class="plus" width="5">
<button type="button">Проверить</button>
<p class="result"></p>
</div>
<script>
const random = n => Math.round(Math.random() * n);
let block = document.querySelector('.primer');
let length = 99;
let arr = Array.from({
length
}, _ => block.cloneNode(true));
document.body.append(...arr);
document.querySelectorAll('.primer').forEach(div => {
let sum = 0;
div.querySelectorAll('.num').forEach(span => {
let num = random(10 - sum);
span.textContent = num;
sum += num;
})
let input = div.querySelector('.plus'),
button = div.querySelector('button'),
result = div.querySelector('.result');
button.addEventListener('click', _ => result.textContent = input.value == sum ? 'Правильно' : 'Неправильно')
})
</script>
</body>
</html>
|
| Часовой пояс GMT +3, время: 02:37. |