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

Adicionando o paciente já com a casa decimal.

Estou tentando adicionar o paciente já com a casa decimal, mas o .toFixed(1) está dando erro;

    var altura = formularioPaciente.altura.value;
    alturaTd.textContent = altura.toFixed(1);
7 respostas

Oi Flavio,

E qual erro ele está dando ?

form.js:37 Uncaught TypeError: altura.toFixed is not a function
    at HTMLButtonElement.<anonymous> (form.js:37)

Pode colocar a sua tag <form> e o seu código completo Javascript para que eu possa debuggar melhor o problema ?

            <form id="formulario-paciente">
                <div class="grupo-nome">
                    <label for="nome">Nome:</label>
                    <input id="nome" name="nome" type="text" placeholder="digite aqui o nome do paciente" value="Flávio José dos Passos" class="campo">
                </div>

                <div class="grupo">
                    <label for="peso">Peso (Kg)</label>
                    <input id="peso" name="peso" type="text" placeholder="digite aqui o peso do paciente" value="92" class="campo">
                </div>

                <div class="grupo">
                    <label for="altura">Altura (m)</label>
                    <input id="altura" name="altura" type="text" placeholder="digite aqui a altura do cliente" value="1.82" class="campo">
                </div>

                <div class="grupo">
                    <button id="adicionar-paciente" class="botao">Adicionar</button>
                </div>
            </form>
var botaoAdicionar = document.querySelector("#adicionar-paciente");
botaoAdicionar.addEventListener("click", function(event){

    event.preventDefault();

    var formularioPaciente = document.querySelector("#formulario-paciente");

    var nome = formularioPaciente.nome.value;
    var peso = formularioPaciente.peso.value;
    var altura = formularioPaciente.altura.value;

    var imc = (peso / (altura * altura)).toFixed(1);

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

    var imputTd = document.createElement("td");
    var checkIn = document.createElement("input");
    checkIn.setAttribute("type", "checkbox");
    imputTd.appendChild(checkIn);

    var numTd = document.createElement("td");
    numTd.textContent = "1";
    numTd.classList.add("num");

    var nomeTd = document.createElement("td");
    nomeTd.textContent = nome;
    nomeTd.classList.add("nome");

    var pesoTd = document.createElement("td");
    pesoTd.textContent = peso;
    pesoTd.classList.add("peso");

    var alturaTd = document.createElement("td");
    alturaTd.textContent = altura;
    alturaTd.classList.add("altura");

    var imcTd = document.createElement("td");
    imcTd.textContent = imc;
    imcTd.classList.add("imc");


    novoPacienteTr.appendChild(imputTd);
    novoPacienteTr.appendChild(numTd);
    novoPacienteTr.appendChild(nomeTd);
    novoPacienteTr.appendChild(pesoTd);
    novoPacienteTr.appendChild(alturaTd);
    novoPacienteTr.appendChild(alturaTd);
    novoPacienteTr.appendChild(imcTd);


    var tabelaPaciente = document.querySelector("#lista-de-pacientes");
    var primeiroPaciente = tabelaPaciente.querySelector("tr:first-child");
    tabelaPaciente.insertBefore(novoPacienteTr, primeiroPaciente);
});
solução!

Oi Flávio,

Demorei para identificar o seu erro pois este código está bem diferente do que é proposto no curso, mas o que está acontecendo é o seguinte:

A função .toFixed(1) só pode ser utilizados em números no Javascript,e neste caso a altura como veio do formulário está sendo interpretada como uma string. Você pode até verificar isto fazendo assim:

console.log(typeof altura);

Se você quer poder utilizar a função toFixed() nela, você tem que primeiro converter o número para um float, assim:

    var altura = formularioPaciente.altura.value;
    var alturaFloat = parseFloat(altura);
    alturaTd.textContent = alturaFloat.toFixed(1);

Faça o teste e me diga se deu tudo certo :) !

Com sua dica meu código ficou assim.

var formularioPaciente = document.querySelector("#formulario-paciente");
var altura = parseFloat(formularioPaciente.altura.value).toFixed(1);

Obrigado e funcionou.

Quando você diz que o código está muito diferente do proposto no curso, isso é que ele está ruim.