6
respostas

Bug no botão Adicionar

Estou com um problema, creio que seja um bug: quando eu dou um reset no site e vou preencher o formulario de adicionar novo paciente e aperto no botão Adicionar, ele não adiciona, agora quando eu aperto enter ele adiciona o novo paciente no formulario de pacientes e logo após eu apertar no botão adcionar ele começa a funcionar. No caso ele só funciona caso primeiro eu aperte em enter pra adicinoar um novo paciente.

Já tentei ver no console se ele dar algum erro, porém não mostra nenhum erro.

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
6 respostas

var botaoAdicionar = document.querySelector("#adicionar-paciente"); botaoAdicionar.addEventListener("click", function(event){ event.preventDefault();

var form = document.querySelector("#form-adiciona");

var nome = form.nome.value;
var peso = form.peso.value;
var altura = form.altura.value;
var gordura = form.gordura.value;

var pacienteTr = document.createElement("tr");

var nomeTd = document.createElement("td");
var pesoTd = document.createElement("td");
var alturaTd = document.createElement("td");
var gorduraTd = document.createElement("td");
var imcTd = document.createElement("td");

nomeTd.textContent = nome;
pesoTd.textContent = peso;
alturaTd.textContent = altura;
gorduraTd.textContent = gordura;

pacienteTr.appendChild(nomeTd);
pacienteTr.appendChild(pesoTd);
pacienteTr.appendChild(alturaTd);
pacienteTr.appendChild(gorduraTd);

var tabela = document.querySelector("#tabela-pacientes");

tabela.appendChild(pacienteTr);

});

        <h1 id="titulo-form">Adicionar novo paciente</h1>
        <form id="form-adiciona">
            <div class="grupo-nome">
                <label for="nome">Nome:</label>
                <input id="nome" name="nome" type="text" placeholder="digite o nome do seu paciente" class="campo-nome">
            </div>
            <div class="grupo">
                <label for="peso">Peso:</label>
                <input id="peso" name="peso" type="text" placeholder="digite o peso do seu paciente" class="campo campo-medio">
            </div>
            <div class="grupo">
                <label for="altura">Altura:</label>
                <input id="altura" name="altura" type="text" placeholder="digite a altura do seu paciente" class="campo campo-medio">
            </div>
            <div class="grupo">
                <label for="gordua">% de Gordura:</label>
                <input id="gordura" name="gordura" type="text" placeholder="digite a porcentagem de gordura do seu paciente" class="campo campo-medio">
            </div>
            <button id="adicionar-paciente" class="botao bto-principal">Adicionar</button>
        </form>
    </secti>

    <script src="js/principal.js" ></script>

Olá, Jasson, tudo bem?

Bem, eu testei seu código aqui e ele funcionou normalmente! A única situação onde o paciente não foi adicionado pelo clique do botão foi quando o botão subia um pouco no início do clique, e o cursor não estava em cima do botão ao fim do clique!

De qualquer forma, você pode conferir se a função que adiciona o paciente realmente está sendo chamada quando o botão é clicado. Ou seja, dentro do listener do click do botão, você pode adicionar algo assim:

botaoAdicionar.addEventListener("click", function(event){
    console.log("Botão clicado!");

    // Restante do código...
});

Então você clicará no botão, se não aparecer nada no console, então o problema está na chamada dessa função anônima, mas se aparecer "Botão clicado!" e ainda assim o paciente não for adicionado, então teremos que analisar o código dentro dessa função (mas desconfio que esse não será o caso).

Ainda adicionalmente, você pode adicionar esses dois listeners ao botão:

botaoAdicionar.addEventListener('mousedown', function() {
    console.log('Botão do mouse para baixo no botão!');
})

botaoAdicionar.addEventListener('mouseup', function() {
    console.log('Botão do mouse para cima no botão!');
})

Se o problema persistir, você pode mandar aqui uma imagem do que aparece no console depois de tentar clicar no botão pela primeira vez.

Fico no aguardo!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Fala Antônio, Desde já agradeço por sua ajuda. Ver só depois que eu clico no botão pela primeira vez, o tobão dar um salto e volta pro mesmo lugar e não adiciona o paciente e nem no console aparece a mensagem "Botão clicado!", porém se eu der enter, ele adiciona o cliente.

Olá novamente, Jasson!

Ok, então vamos fazer mais uma verificação: vamos adicionar dois listeners no próprio body da página e descobrir qual está sendo o target (alvo) do clique do seu mouse. Deveria ser o botão, mas por algum motivo o listener não está funcionando nele.

Você pode adicionar o seguinte código:

var body = document.querySelector('body');

body.addEventListener('click', function (event) {
    console.log("Mouse clicou em: ");
    console.log(event.target);
});

body.addEventListener('mousedown', function (event) {
    console.log("Mouse abaixou em: ");
    console.log(event.target);
});

body.addEventListener('mouseup', function (event) {
    console.log("Mouse subiu em: ");
    console.log(event.target);
});

Na função anônima que fica dentro da função addEventListener, podemos passar um parâmetro (nesse caso chamamos de event), que guarda algumas informações do evento que foi escutado. Esse parâmetro possui a propriedade target, que indica o elemento em que clicamos!

Então, ao clicar no botão, o resultado esperado no console deveria ser algo assim:

Print do console com as seguintes sete mensagens: "Mouse abaixou em: ", HTML do botão,  "Mouse subiu em: ", HTML do botão, "Botão clicado!", "Mouse clicou em: ", HTML do botão.

No seu caso, já que o botão não está escutando o evento do clique, vamos pelo menos descobrir qual está sendo o alvo do clique! E se é isso que está nos atrapalhando. Se no seu console aparecer algo diferente, você pode postar aqui.

Fico no aguardo!