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

Form e AppenChild - ja arrumando coisas que faltaram na aula..

Gostei bastante desta forma que o instrutor mostrou como criar elementos e atribuir classes extras, show de bola. Segue o meu, animei e já fui implementando o que eu tinha em mente :D

HTML

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <title>Aparecida Nutrição</title>
        <link rel="icon" href="favicon.ico" type="image/x-icon">
        <link rel="stylesheet" type="text/css" href="css/reset.css">
        <link rel="stylesheet" type="text/css" href="css/index.css">
    </head>
    <body onload="calcula()">

        <header>
            <div class="container">
                <h1 class="titulo">Aparecida Nutrição</h1>
            </div>
        </header>
        <main>
            <section class="container">
                <h2>Meus pacientes</h2>
                <table>
                    <thead>
                        <tr>
                            <th>Nome</th>
                            <th>Peso(kg)</th>
                            <th>Altura(m)</th>
                            <th>IMC</th>
                        </tr>
                    </thead>
                    <tbody id="tabela-pacientes">
                        <tr class="paciente">
                            <td class="info-nome">Paulo</td>
                            <td class="info-peso">539.53</td>
                            <td class="info-altura">2.00</td>
                            <td class="info-imc">0</td>
                        </tr>

                        <tr class="paciente">
                            <td class="info-nome">João</td>
                            <td class="info-peso">80</td>
                            <td class="info-altura">5.72</td>
                            <td class="info-imc">0</td>
                        </tr>

                        <tr class="paciente">
                            <td class="info-nome">Erica</td>
                            <td class="info-peso">54</td>
                            <td class="info-altura">1.64</td>
                            <td class="info-imc">0</td>
                        </tr>

                        <tr class="paciente">
                            <td class="info-nome">Douglas</td>
                            <td class="info-peso">805</td>
                            <td class="info-altura">3.73</td>
                            <td class="info-imc">0</td>
                        </tr>

                        <tr class="paciente">
                            <td class="info-nome">Tatiana</td>
                            <td class="info-peso">23</td>
                            <td class="info-altura">0.95</td>
                            <td class="info-imc">0</td>
                        </tr>
                    </tbody>
                </table>                
            </section>

            <section class="container">
                <h2 id="titulo-form">Adicionar novo paciente</h2>
                <form id="form-adiciona">
                    <div class="grupo">
                        <label for="nome">Nome:</label>
                        <input id="nome" name="nome" type="text" placeholder="digite o nome do seu paciente" class="campo">
                    </div>
                    <div class="grupo">
                        <label for="peso">Peso:</label>
                        <input id="peso" name="peso" type="text" placeholder="digite o peso" class="campo campo-medio">
                    </div>
                    <div class="grupo">
                        <label for="altura">Altura:</label>
                        <input id="altura" name="altura" type="text" placeholder="digite a altura" class="campo campo-medio">
                    </div>    
                    <button type="submit" id="adicionar-paciente">Cadastrar paciente</button>

                </form>
            </section>
            <script src="js/principal.js"></script>
        </main>
    </body>
</html>
4 respostas

CSS

*{
    box-sizing: border-box;
 }

body{
    font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
    font-size: 14px;
}

header{
    background-color: #333;
    height: 3em;
    color: #FFF;
    margin-bottom: 1em;
}

header h1{
    font-size: 2em;
    display:inline-block;
    vertical-align:    middle;
}
header h2{
    font-size: 2em;
    display:inline-block;
    vertical-align:    middle;
}

header .container:before{
    content: '';
    display:inline-block;
    height: 100%;
    vertical-align:    middle;
}

.container{
    width: 60%;
    height: 100%;
    margin: 0 auto;
}

section{
    margin: 2em 0;
    overflow: hidden;
}

section h2{
    font-size: 2em;
    display: block;
    padding-bottom: .5em;
    border-bottom: 1px solid #ccc;
    margin-bottom: .5em;
}

table{
    width: 100%;
    margin-bottom : .5em;
    table-layout: fixed;
}

td, th {
    padding: .7em;
    margin: 0;
    border: 1px solid #ccc;
    text-align: center;
    vertical-align: middle;
}

th{
    font-weight: bold;
    background-color: #EEE;
}

label{
    color: #555;
    display: block;
    margin-bottom: .2em;
}

.campo{
    margin: 0;
    padding-bottom: 1em;
    width: 100%;
    border: 1px solid #ccc;
    padding: .7em;
    width: 100%;
}

.campo-medio{
    display: inline-block;
    padding-right: .5em;
}

.grupo{
    width: 100%;
    padding: 10px 0px;
    display: inline-block;
}

#nome{
    width: 70%;
}

#peso, #altura{
    width: 40%;
}

button{
    padding: .5em 2em;
    border: 0;
    border-bottom: 3px solid;
    font-size: 1.2em;
    cursor: pointer;
    margin: 0;
    margin-top: -3px;
    color: #fff;
    background-color:#0c8cd3;
    border-color: #04324c;
    width: 70%;
    display: block;
    clear: both;
    margin: 10px 0px;
    text-transform: uppercase;
}

button:active{
    margin-top:0px;
    border: 0;
}

button:hover{
    background-color: gray;
    border-bottom: 3px black solid;
    transition: 0.7s all;
}

.adicionar-paciente{
    margin-top: 30px;
}

.campo-invalido{
    border: 1px solid red;
}

.peso-invalido{
    background: red;
    font-weight: bold;
}

.altura-invalida{
    background: magenta;
    font-weight: bold;
}

.peso-altura-invalidos{
    background: yellow;
    font-weight: bold;
}

JS

const titulo = document.querySelector(".titulo")
titulo.textContent="Aparecida Nutrição Esportiva";
const botaoAdd = document.querySelector("form");

const paciente = document.querySelectorAll(".paciente");

function calcula(){
for(let i=0;i<paciente.length;i++){
    let tdPeso = paciente[i].querySelector(".info-peso").textContent;
    let tdAltura = paciente[i].querySelector(".info-altura").textContent;
    let tdImc = paciente[i].querySelector(".info-imc");   

        if((tdPeso<=0 || tdPeso>=300) && (tdAltura<=0 || tdAltura>=3)){
            paciente[i].classList.add("peso-altura-invalidos");
            tdImc.textContent = "Peso e/ou Altura inválidos!";      
                }else if(tdPeso<=0 || tdPeso>=300){
                    paciente[i].classList.add("peso-invalido");
                    tdImc.textContent = "Peso inválido!"; 
                        }else if(tdAltura<=0 || tdAltura>=3){
                            paciente[i].classList.add("altura-invalida");
                            tdImc.textContent = "Altura inválida!";
                        }else{
                            let imc = calculaImc(tdPeso,tdAltura);
                            tdImc.textContent=imc;
                            }
        }
    }

function calculaImc(tdPeso,tdAltura){
    let fImc = (tdPeso / (tdAltura * tdAltura)).toFixed(2);
    return fImc;
}

botaoAdd.addEventListener("submit", (e,tdPeso,tdAltura) => {
    e.preventDefault();

    const frmNome = botaoAdd.nome.value;
    const frmPeso = botaoAdd.peso.value;
    const frmAltura = botaoAdd.altura.value;

    const pacienteTr = document.createElement("tr");
    pacienteTr.classList.add("paciente");

    const nomeTd = document.createElement("td");
    nomeTd.classList.add("info-nome");
    nomeTd.textContent = frmNome;

    const pesoTd = document.createElement("td");
    pesoTd.classList.add("info-peso");
    pesoTd.textContent = frmPeso;

    const alturaTd = document.createElement("td");
    alturaTd.classList.add("info-altura");
    alturaTd.textContent = frmAltura;

    const imcTd = document.createElement("td");
    imcTd.classList.add("info-imc");

    if((frmPeso<=0 || frmPeso>=300) && (frmAltura<=0 || frmAltura>=3)){
        pacienteTr.classList.add("peso-altura-invalidos");
        imcTd.textContent = "Peso e/ou Altura inválidos!";      
            }else if(frmPeso<=0 || frmPeso>=300){
                pacienteTr.classList.add("peso-invalido");
                imcTd.textContent = "Peso inválido!"; 
                    }else if(frmAltura<=0 || frmAltura>=3){
                        pacienteTr.classList.add("altura-invalida");
                        imcTd.textContent = "Altura inválida!";
                    }else{
                        imcTd.textContent = calculaImc(frmPeso,frmAltura);
                        }

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

    const tableBody = document.querySelector("#tabela-pacientes");
    tableBody.appendChild(pacienteTr);

    console.log(tableBody);
});

Tela ao iniciar Insira aqui a descrição dessa imagem para ajudar na acessibilidade Tela após incluir alguns... Insira aqui a descrição dessa imagem para ajudar na acessibilidade Obs:. Retirei Gordura Corporal pq acredito que isso deveria ser implementado se fosse com fórmula. Assim como ao cadastrar o paciente, já mandou aplicar as regras para que coloque no imc o problema, caso houver.

Sensação de dever cumprido no exercício, aula produtiva :)

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

solução!

Oi Alysson, tudo bem?

Muito obrigada por compartilhar com a gente o seu código todo completinho e parabéns pela dedicação e por praticar o que viu nas aulas.

Ficou muito legal! Me inspirou para fazer mudanças no meu projeto também :D.

Um abraço e bons estudos.