To create elements with Jquery, you can use the method append, and to return the value present in the input, you use the method val.
Then at the click of the insert button, we take the value, we check it, because the input may be empty, if valid, we make a loop creating field by field.
See below for an example:
$(function() {
$("#inserir").click( () => {
let quantidade = $("#quantidade").val();
if (quantidade) {
quantidade = parseInt(quantidade);
for (let i=0; i < quantidade; i++) {
$("body").append(`<input type="number">`);
}
}
});
});
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title> UpFlow.me </title>
</head>
<body style="background-color:powderblue;">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2> Adicionar Campos</h2>
<input id="quantidade" type="text" name="visor" /> <br/>
<input id="inserir" type="button" value="inserir" />
</body>
</html>
By changing your HTML a little more, we can create a div or a form which will be where the fields will be created, this way we can clean this element whenever the button is clicked, thus avoiding the checksum of inputs:
$(function() {
$("#inserir").click( () => {
let quantidade = $("#quantidade").val();
const campos = $("#campos");
if (quantidade) {
quantidade = parseInt(quantidade);
campos.empty();
for (let i=0; i < quantidade; i++) {
campos.append(`<input type="number">`);
}
}
});
});
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title> UpFlow.me </title>
</head>
<body style="background-color:powderblue;">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2> Adicionar Campos</h2>
<input id="quantidade" type="text" name="visor" /> <br/>
<input id="inserir" type="button" value="inserir" />
<div id="campos"></div>
</body>
</html>
For this cleaning, we use the method empty.
To take the values of all new inputs and add, there are some ways, I will put as an example one where inputs are created with a specific class, so with Jquery I search all these inputs for this class and add their respective values using the method each jquery:
$(function() {
$("#inserir").click( () => {
let quantidade = $("#quantidade").val();
const campos = $("#campos");
if (quantidade) {
quantidade = parseInt(quantidade);
campos.empty();
for (let i=0; i < quantidade; i++) {
campos.append(`<input class="soma" type="number">`);
}
if (quantidade > 0) {
campos.append(`<input type="button" id="somar" value="somar" onclick="Somar()">`);
}
}
});
});
function Somar() {
const inputs = $(".soma");
let total = 0;
inputs.each( (index, element) => {
if ($(element).val()) {
total += parseInt($(element).val());
}
});
console.log(total);
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title> UpFlow.me </title>
</head>
<body style="background-color:powderblue;">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2> Adicionar Campos</h2>
<input id="quantidade" type="text" name="visor" /> <br/>
<input id="inserir" type="button" value="inserir" />
<div id="campos"></div>
</body>
</html>
References:
https://api.jquery.com/append/
https://api.jquery.com/ready/
https://api.jquery.com/val/
https://api.jquery.com/empty/
https://api.jquery.com/each/
Perfect, in case to conclude I would need to add the entries in the new inputs, for example: we have 3 inputs, enter the number in 10 in each one and return 30.com which I have in mind, in c# I would think of something like storing the numbers in an array and return the result, how the syntax would be with javascript and jquery?
– galegoz
@galegoz
const campos = Array.from(document.querySelector('#campos').children);
 const total = campos
 .map(input => Number(input.value))
 .reduce((acc, cur) => cur + acc);– vik