Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Conta sempre da o mesmo número

Criei uma fórmula par a multiplicar o valor que a pessoa insere na caixa por 0.714, mas não importa o valor digitado a conta está sempre dando 92.11

alguém tem uma luz do que pode ser?

A conta se encontra na function calculaImc;

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

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

    var paciente = obtemPacienteDoFormulario(form);

    var pacienteTr = montaTr(paciente);

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

    tabela.appendChild(pacienteTr);

    form.reset();

});


function obtemPacienteDoFormulario(form){

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        imc: calculaImc(peso, formulaPontos)
    }

   return paciente;
}


function montaTr(paciente){
    var pacienteTr = document.createElement("tr");
    pacienteTr.classList.add("paciente");

    pacienteTr.appendChild(montaTd(paciente.nome, "info-nome"));
    pacienteTr.appendChild(montaTd(paciente.peso, "info-peso"));
    pacienteTr.appendChild(montaTd(paciente.imc, "info-imc"));

    return pacienteTr;
}

function montaTd(dado, classe){
    var td = document.createElement("td");
    td.textContent = dado;
    td.classList.add(classe);
    return td;
}

var pacientes = document.querySelectorAll(".paciente");

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

    var paciente = pacientes[i];

    var tdPeso = paciente.querySelector(".info-peso");
    var peso = tdPeso.textContent;

    var tdNome = paciente.querySelector(".info-nome");
    var nome = tdNome.textContent;

    var tdImc = paciente.querySelector(".info-imc");

}

    var formulaPontos = 0.714;


    function calculaImc(peso, formulaPontos) {
      var imc = 0;
      imc = (peso * formulaPontos);
      return imc.toFixed(2);
}
5 respostas

Olá Fabio, esse é todo o JavaScript que você implementou até agora?

Outra coisa, tem como você também compartilhar o HTML aqui?

Olá Rômulo, é sim!

O HTML pode parecer confuso pq eu apenas copiei do curso onde ele ensinava a fazer uma tabela para uma nutricionista, ai eu quis pegar a estrutura e ver se conseguia implementar algo diferente.

Ainda não tenho segurança para fazer do zero, por isso, por exemplo, no lugar de peso, ele captura o valor do produto rsrsrsrs

Segue abaixo o HTML:

<!DOCTYPE html>
<html lang="pt-br">
<meta charset="UTF-8">

<head>
<title> Conversor de Pontos BB </title>
    <link rel="icon" href="calculadora1.png">
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Crimson+Text:400,400italic,600">
    <link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Open+Sans+Condensed:700">
    <link rel="stylesheet" href="reset.css">
    <link rel="stylesheet" href="pontos.css">
</head>

<body>
    <main>
        <h1 id="titulo" class="titulo-principal">"Calcule abaixo os seus Pontos Barba"</h1>
        <br>
        <br>
        <h2>Adicione o nome e o produto na tabela abaixo e veja quantos pontos você ganhou:</h2>
        <br><br>
        <ul>
            <section class="container">
                <table>
                    <thead>
                        <tr>
                            <th>Nome do Produto</th>
                            <th>Valor</th>
                            <th>Pontos Acumulados</th>
                        </tr>
                    </thead>
                    <tbody id="tabela-pacientes">
                        <tr class="paciente" id="primeiro-paciente">
                            <td class="info-nome">Tônico Barba Brasil</td>
                            <td class="info-peso">129</td>
                            <td class="info-imc">92.14</td>
                        </tr>
                    </tbody>
                </table>
                <br><br>
                <h2>Preencha os dados abaixo para acessar a pontuação do produto:</h2>
                <br><br>
                    <h2 id="titulo-form">Verificar Pontuação do Produto: </h2>
                    <ul id="mensagens-erro"></ul>
                    <form id="form-adiciona">
                        <div class="grupo">
                            <label for="nome">Nome do Produto:</label>
                            <input id="nome" name="nome" type="text" placeholder="digite o nome do seu paciente" class="campo">
                        </div>
                        <div class="grupo">
                            <label for="peso">Valor do Produto:</label>
                            <input id="peso" name="peso" type="text" placeholder="digite o peso do seu paciente" class="campo campo-medio">
                        </div>
                            <button id="adicionar-paciente" class="botao bto-principal">Adicionar</button>
                        <br>
                    </form>
                            <br>
                            <br>
                </section>
    </main>
            <script src=""></script>
            <script src="calcula-pontos.js"></script>
</body>
</html>
solução!

Então Fabio, o problema está dentro da função obtemPacienteDoFormulario:

function obtemPacienteDoFormulario(form) {

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        imc: calculaImc(peso, formulaPontos)
    }

    return paciente;
}

Na hora de chamar a função calculaImc(peso, formulaPontos), o JavaScript está reconhecendo o peso como sendo o input de id peso do seu HTML.

Então, você está passando para a função um input e o formulaPontos. Para funcionar, você tem que pegar o value desse input, assim como você fez para inicializar a propriedade nome, por exemplo:

function obtemPacienteDoFormulario(form) {

    var paciente = {
        nome: form.nome.value,
        peso: form.peso.value,
        imc: calculaImc(form.peso.value, formulaPontos)
    }

    return paciente;
}

Poxa, show de bola, deu certinho agora, muitooooo obrigadoo!!!!

De nada, Fabio! Como a sua dúvida foi solucionada, eu vou fechar esse tópico, tudo bem?

Para qualquer outra dúvida ou problema, não hesite em recorrer ao nosso fórum! Bons estudos!

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