Adicionar / Remover campos dinamicamente

Como adicionar e remover dinamicamente um elemento HTML a partir de um input? (Javascript puro)

by Rodrigo Portillo

HTML

<div class="dependentes">
  <button id="btnAdicionarDependentes">
  📝Adicionar Dependentes
  </button>
  <div class="container" id="dependentesContainer">
  </div>
  <button class="green" id="btnCapturarDados">
  âś… Capturar Dados
  </button>
</div>
<pre id="containerDados">
  
</pre>

CSS

body{
  font-family: sans-serif;  
}

.dependentes{
  padding: 1rem;
  border: 1px solid #ccc;
}

.dependentes button{
  border: none;
  background-color: #5eb2e6;
  color: white;
  border-radius: 3px;
  text-transform: uppercase;
  padding: .75rem 1rem;
}
.dependentes button.green{
  background-color: #005c54;
  margin-top: 2rem;
}

.dependentes .container{
  margin-top: 1rem;
  display: grid;
  grid-gap: .5rem;
}

.dependentes .container input{
  padding: .5rem .75rem;
  border: 1px solid #ccc;
}

.dependentes .container input:focus{
  border: 1px solid black;
  outline: none;
}

.dependentes .container .dependente{
  display: grid;
  grid-gap: .5rem;
  grid-template-columns: 33% 33% 33%;
}

.dependentes .container .dependente .action a{
  text-transform: uppercase;
  text-decoration: none;
  padding: .5rem .75rem;
  display: inline-block;
}

.dependentes .container .dependente .action a.salvar{
  border-radius: 2px;
  background-color: #efefef;
  color: #005c54;
}

.disabled{
  pointer-events: none;
  opacity: .5;
  filter: grayscale(100%);
}

JavaScript

var dependentes = [{
	identificador: 13,
  nome: "Joana da Silva",
  idade: 12,
}];


function carregarDependentes(){
	let dependentes_container = document.querySelector("#dependentesContainer");
  		dependentes_container.innerHTML = "";
  dependentes.forEach((el)=>{
  	let identificador = el.identificador;
  	let nome = el.nome;
    let idade = el.idade;
    let dependente_container = `<div class="dependente" data-id="${identificador}">
    															<input class="nome" placeholder="Digite o nome" type="text" value="${nome}"/>
                                  <input class="idade" placeholder="Digite a idade" type="number" value="${idade}"/>
                                  <div class="action">
                                  	<a href="#" class="salvar">salvar đź’ľ</a>
                                    <a href="#" class="remover">❌</a>
																	</div>
															  </div>`;
  	dependentes_container.innerHTML += dependente_container;
  });
  salvarDependentes();
  removerDependentes();
  travarOutros(false);
}

function removerDependentes(){
	document.querySelectorAll("#dependentesContainer .remover").forEach((el, i)=>{
  	el.addEventListener("click", ()=>{
  		dependentes.splice(i, 1);  	
      carregarDependentes();
    });
  });
}

function adicionarDependentes(){
  dependentes.push({identificador:"", nome:"", idade: ""});
  carregarDependentes();
  travarOutros(document.querySelector("#dependentesContainer > div:last-child"));
}

function salvarDependentes(){
		document.querySelectorAll("#dependentesContainer .salvar").forEach((el, i)=>{
  	el.addEventListener("click", ()=>{
      let identificador = el.parentElement.parentElement.getAttribute("data-id");
      let nome = el.parentElement.parentElement.querySelector(".nome").value;
      let idade = el.parentElement.parentElement.querySelector(".idade").value;
    	
      if(!nome.length || !idade.length){
      	alert("Nome e idade precisam ser preenchidos para salvar.");
        return...