2
respostas

Duvida Crud Com JavaScript

Estou aprendendo JavaScript, e já consigo submeter meu formulário.

Minha duvida é: como faço para poder alterar e excluir, lembrando que qualquer dica é valida.

Qualquer dica é super válida para poder resolver o exercício.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>Agenda de Contatos</title>
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/estilo.css">
</head>
<body>
    <header>
        <div class="container">
            <h1>Agenda Contatos</h1>
        </div>
    </header>
    <main class="container">
        <section>
            <h2>Meus Contatos</h2>
            <table>
                <tr>
                    <th>Nome</th>
                    <th>Rua</th>
                    <th>Bairro</th>
                    <th>Telefone Fixo</th>
                    <th>Telefone Celular</th>
                </tr>
                <tbody class="contato">

                </tbody>
            </table>
        </section>
        <section>
            <h2>Cadastro de Contatos</h2>
            <form id="formulario" >
                <fieldset>
                    <label for="campo-nome">Nome:</label>
                    <input id="campo-nome" type="text" placeholder="digite o nome do seu Contato">
                </fieldset>
                <fieldset class="campo-endereco">
                    <label for="campo-endereco">Rua:</label>
                    <input id="campo-endereco" type="text" placeholder="digite o endereço do seu Contato">
                </fieldset>
                <fieldset class="campo-bairro">
                    <label for="campo-bairro">Bairro:</label>
                    <input id="campo-bairro" type="text" placeholder="digite o seu bairro do seu Contato">
                </fieldset>
                <fieldset class="campo-endereco">
                    <label for="campo-telefoneFixo">Telefone Fixo:</label>
                    <input id="campo-telefoneFixo" type="text" placeholder="digite o telefone Fixo">
                </fieldset>
                <fieldset class="campo-TelefoneCelular">
                    <label for="campo-celular">Telefone Celular:</label>
                    <input id="campo-celular" type="text" placeholder="digite o telefone Celular">
                </fieldset>
                <button id="adicionar-contato" class="botao bto-principal">Adicionar</button>
            </form>
        </section>
    </main>
    <script src="js/index.js"></script>
</body>
</html>

index.js

var contatos = [ 
document.querySelector("#campo-nome"),
document.querySelector("#campo-endereco"),
document.querySelector("#campo-bairro"),
document.querySelector("#campo-telefoneFixo"),
document.querySelector("#campo-celular"),
];
console.log(contatos);

document.querySelector('#formulario').addEventListener("submit", function(event){

    event.preventDefault();

    var tr = document.createElement('tr');

    contatos.forEach(function(posicao) {
        td = document.createElement('td');
        td.textContent = posicao.value;
        tr.appendChild(td);
    });

    var tabela = document.querySelector("table tbody");

    tabela.appendChild(tr);

    for(var i=0;i <=contatos.length;i++){
        this[i].value ='';
    }

    contatos[0].focus();
});
2 respostas

Fala Dayson, tudo bem ?

A ideia é que você vai precisar ter em cada linha da tabela, algum botão ou link pra alteração e remoção. No caso da remoção a dica é tente fazer com que cada linha da tabela, guarde algum id (se é que já não tem), identificando cada registro. Ai é só você escrever chamada no onclick do botao pra buscar a tr com o id especifico e remover esse nó.

No caso da alteração é um pouco mais trabalhoso. Você também vai precisar seguir essa linha de identificar cada registro e ter uma função pra disparar quando o botao for clicado. Mas neste caso você deverá, por exemplo, recuperar as informações dessa linha e exibir as mesmas no form - usando a propriedade value dos inputs, por exemplo - e depois da alteração o submit deveria chamar outra função que identifique a tr desse registro, e a substitua por uma nova, com os novos dados.

Espero ter ajudado, no fluxo. Qualquer duvida vá postando por aqui.

Abraço!

Já consegui, estou com uma duvida somente no atualizar, aonde quando clico em atualizar ele monta todo objeto no meu formulário, e na hora de substituir ele está duplicando.


document.getElementById('formulario').addEventListener('submit',cadastrarContato);



function verificaJSON(contato){
    if(localStorage.getItem('contato') == null){
        var contatos = [];
        contatos.push(contato);
        localStorage.setItem('contato', JSON.stringify(contatos));
    }
    else{
        var contatos =  JSON.parse(localStorage.getItem('contato'));
        contatos.push(contato);
        localStorage.setItem('contato', JSON.stringify(contatos));
    }
}

function cadastrarContato(e){


    var nome = document.querySelector('#campo-nome').value;
    var dataNascimento =document.querySelector('#campo-dataNascimento').value;
    var email =document.querySelector('#campo-email').value;
    var endereco =document.querySelector('#campo-endereco').value;
    var celular =document.querySelector('#campo-celular').value;

    if(!nome || !dataNascimento){
        alert('Campo nome ou campo Data está vazio.');
        return false;
    }
    var contato = {
        "nome" : nome,
        "data" : dataNascimento,
        "email" : email,
        "endereco" : endereco,
        "celular" : celular
    }    

    verificaJSON(contato);

    document.getElementById('formulario').reset();

    mostraContatos();

    e.preventDefault();
}



function mostraContatos(){

    var contatos = JSON.parse(localStorage.getItem('contato'));    

    var contatoResultado = document.querySelector("#resultados");

    contatoResultado.innerHTML='';

    for(var i = 0; i < contatos.length; i++){

        contatoResultado.innerHTML +='<tr>'+
        '<td>'+ contatos[i].nome + '</td>'+
        '<td>'+ contatos[i].data + '</td>'+
        '<td>'+ contatos[i].email + '</td>'+
        '<td>'+ contatos[i].endereco + '</td>'+
        '<td>'+ contatos[i].celular + '</td>'+
        '<td> <button class="btn-excluir" onclick="excluirContato(\''+contatos[i].nome+'\')"> Excluir </button> </td>'+
        '<td> <button class="btn-editar" onclick="atualizarContato(\''+contatos[i].nome+'\')"> Editar </button> </td>'+
        '</tr>'
    }
}

function excluirContato(nome){

    var contatos = JSON.parse(localStorage.getItem('contato'));

    for(var i = 0; i < contatos.length; i++){
        if(contatos[i].nome == nome){
            if(confirm(nome + ' será excluído ?')){
                contatos.splice(i, 1);
            }
        }
        localStorage.setItem('contato',JSON.stringify(contatos));
    }
    mostraContatos();
}

function atualizarContato(nome){

    if(confirm('Deseja editar o contado? ')){

        var contatos = JSON.parse(localStorage.getItem('contato'));

        var contatoEncontrado;

        for(var i =0; i <contatos.length; i++){
            if(contatos[i].nome == nome){
                contatoEncontrado = contatos[i];

                document.querySelector('#campo-nome').value = contatoEncontrado.nome;
                document.querySelector('#campo-dataNascimento').value = contatoEncontrado.data;
                document.querySelector('#campo-email').value = contatoEncontrado.email ;
                document.querySelector('#campo-endereco').value = contatoEncontrado.endereco;
                document.querySelector('#campo-celular').value = contatoEncontrado.celular;
            }
        }    
        mostraContatos();
    }
}

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software