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

Erro ao criar objeto paciente

Quando tento criar o objeto paciente, apresenta erro!

Desta forma o código funciona:

var eventoBtnEnviar = document.querySelector("#btnEnviar").addEventListener("click", function(clicado) {
    //nomePaciente    //pesoPaciente
    //alturaPaciente  //gorduraPaciente

var form = document.querySelector("#campoForm");
//EXTRAINDO AS INFORMAÇÕES DO FORM
var campoNomePaciente      = document.getElementById("nomePaciente").value;
var campoAlturaPaciente  = document.getElementById("alturaPaciente").value;
var campoPesoPaciente      = document.getElementById("pesoPaciente").value;
var campoGorduraPaciente = document.getElementById("gorduraPaciente").value;


//CRIA TR E TD DO PACIENTE
var pacienteTr           = document.createElement("tr");
    var nomeTd           = document.createElement("td");
    var alturaTd      = document.createElement("td");
    var pesoTd         = document.createElement("td");
    var gorduraTd     = document.createElement("td");
    var imcTd         = document.createElement("td");


nomeTd.textContent         = campoNomePaciente;
alturaTd.textContent    = campoAlturaPaciente;
pesoTd.textContent         = campoPesoPaciente;
gorduraTd.textContent     = campoGorduraPaciente;
imcTd.textContent        = calculaImc(peso,altura);

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


//ADICIONANDO O PACIENTE NA TABELA
var tabela = document.querySelector("#tabela-paciente");
    tabela.appendChild(pacienteTr);
    pacienteTr.style.backgroundColor = "green";

erro:

quando altero esta parte do código :

var campoNomePaciente      = document.getElementById("nomePaciente").value;
var campoAlturaPaciente  = document.getElementById("alturaPaciente").value;
var campoPesoPaciente      = document.getElementById("pesoPaciente").value;
var campoGorduraPaciente = document.getElementById("gorduraPaciente").value;

para:

var campoNomePaciente      = form.campoNomePaciente.value;
var campoAlturaPaciente  = form.campoAlturaPaciente.value;
var campoPesoPaciente      = form.campoPesoPaciente.value;
var campoGorduraPaciente = form.campoGorduraPaciente.value;

o 'nome' do cliente não aparece na tabela, e se coloco o campo value pra buscar o valor, aparece esse erro:

"form.js:8 Uncaught TypeError: Cannot read property 'value' of undefined at HTMLButtonElement. (form.js:8)"

Cordialmente, Igor Federizi

7 respostas

Fala, Igor!

Quando você faz:

var campoNomePaciente = document.getElementById("nomePaciente").value;

Você já está pegando o value do input.

Então, ou você faz assim:

var campoNomePaciente = document.getElementById("nomePaciente");
var campoNomePaciente = form.campoNomePaciente.value;

ou assim (tirando o .value de algum dos seletores de objetos):

var campoNomePaciente = document.getElementById("nomePaciente").value;
var campoNomePaciente = form.campoNomePaciente;

Testa aí e dá um retorno.

Abraço.

Boa noite,

Desculpe a demora, quando eu coloco ele assim:

var campoNomePaciente = document.getElementById("nomePaciente");
var campoNomePaciente = form.campoNomePaciente.value;

da o mesmo erro.

quando coloco assim:

var campoNomePaciente = document.getElementById("nomePaciente").value;
var campoNomePaciente = form.campoNomePaciente;

ele acrescenta uma nova linha, mas a coluna(campo nome, por exemplo) não grava o valor.

cordialmente, Igor Federizi

Boa noite, Igor!

Perceba que o botão eventoBtnEnviar está submetendo o form. você precisa evitar que isso aconteça. Algo desse tipo:

var btnEnviar = document.querySelector("#btnEnviar");
btnEnviar.addEventListener("click", function(event) {
    event.preventDefault(); // essa linha evita que o form seja submetido no click
    // restante do código
}

Posta teu html pra gente dar uma olhada...

HTML

<!DOCTYPE html>
<html>
    <meta charset="utf-8">
    <link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css">

<head>
    <title>Nutrição</title>
</head>
<body>

<div class="container">

<h1>Meus pacientes</h1>
    <table class="table" id="tabela">

        <thead class="table table-striped">
            <tr>
                <th>Nome</th>
                <th>Peso</th>
                <th>Altura</th>
                <th>Gordura</th>
                <th>IMC</th>
            </tr>
        </thead>

        <tbody id="tabela-paciente">

        <tr class="paciente" id="primeiro-paciente">
                <td class="info-nome">Paulo</td>
                <td class="info-peso">90</td>
                <td class="info-altura">2.00</td>
                <td class="info-gordura">10</td>
                <td class="info-imc">0</td>
        </tr>

        <tr class="paciente">
                <td class="info-nome">João</td>
                <td class="info-peso">800</td>
                <td class="info-altura">1.72</td>
                <td class="info-gordura">40</td>
                <td class="info-imc">0</td>
        </tr>

        <tr class="paciente">
                <td class="info-nome">Érica</td>
                <td class="info-peso">54</td>
                <td class="info-altura">1.64</td>
                <td class="info-gordura">14</td>
                <td class="info-imc">0</td>
        </tr>
        <tr class="paciente">
                <td class="info-nome">Douglas</td>
                <td class="info-peso">85</td>
                <td class="info-altura">1.73</td>
                <td class="info-gordura">24</td>
                <td class="info-imc">0</td>
        </tr>
        <tr class="paciente">
                <td class="info-nome">Tatiana</td>
                <td class="info-peso">46</td>
                <td class="info-altura">1.55</td>
                <td class="info-gordura">19</td>
                <td class="info-imc">0</td>
        </tr>

        </tbody>

    </table>
</div>


<div class="container" id="campoForm">
    <form action="" class="form-group col-md-3">
        <label for="nome">Nome Paciente</label>
        <input type="text" class="form-control" name="nome" id="nomePaciente" placeholder="Nome do Paciente">
    </form>

    <form action="" class="form-group col-md-3">
        <label for="nome">Peso</label>
        <input type="number" class="form-control" id="pesoPaciente" placeholder="Nome do Paciente">
    </form>

    <form action="" class="form-group col-md-3">
        <label for="nome">Altura</label>
        <input type="number" class="form-control" id="alturaPaciente" placeholder="Nome do Paciente">
    </form>

    <form action="" class="form-group col-md-3">
        <label for="nome">Gordura</label>
        <input type="number" class="form-control" id="gorduraPaciente" placeholder="Nome do Paciente">
    </form>


        <button type="submit" class="btn btn-primary" name="Enviar" id="btnEnviar">Enviar</button>

</div> <!-- CONTAINER -->


<!--JS -->
<script type="text/javascript" src="js/archive.js"></script>
<script type="text/javascript" src="js/form.js"></script>
<script type="text/javascript" src="jquery.min.js"></script>

</body>

</html>

Alguma coisa?

solução!

Igor, algumas coisas precisam ser ajustadas.

1) você só precisa de 1 form;

2) cada input deve ter uma propriedade name e um id;

3) cada label referencia um input, então, na propriedade for da label, você deve colocar o id do input ao qual ela corresponde.

4) todos os inputs e o botão de submissão do formulário devem estar dentro da tag form.

Seria algo mais ou menos assim:

<div class="container" id="campoForm">
    <form>
        <label for="nomePaciente">Nome Paciente</label>
        <input type="text" name="nomePaciente" id="nomePaciente" class="form-control" placeholder="Nome do Paciente">

        <label for="pesoPaciente">Peso</label>
        <input type="number" name="pesoPaciente" id="pesoPaciente" class="form-control" placeholder="Nome do Paciente">

        <label for="alturaPaciente">Altura</label>
        <input type="number" name="alturaPaciente" id="alturaPaciente" class="form-control" placeholder="Nome do Paciente">

        <label for="gorduraPaciente">Gordura</label>
        <input type="number" id="gorduraPaciente" class="form-control" placeholder="Nome do Paciente">

        <button type="submit" class="btn btn-primary" name="Enviar" id="btnEnviar">Enviar</button>
    </form>
</div> <!-- CONTAINER -->

Agora fica mais fácil você pegar os elementos do formulário.

Tenta usar o querySelector ao invés de getElementById.

Para pegar o value do input, use:

var form = document.querySelector("#campoForm");
var campoNomePaciente = form.nomePaciente.value;
var campoPesoPaciente = form.pesoPaciente.value;
// outras variáveis com o restante dos dados do paciente
// não precisa repetir o "var form"

Faz os ajustes e testa de novo...

Top cara, agora deu certo, acho que eram os for dos input!

Abraços