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

Dúvida no Ex. 2 da Aula 6 - Eventos

Tenho a seguinte function

o que percorreArray retornar a function anonima irá usar...

function calculaTodosImcs(){
 var trsPacientes = document.getElementsByClassName("paciente");    
        percorreArray(trsPacientes, function(trPaciente){
        var trImc = trPaciente.getElementsByClassName("info-imc")[0];
        constroi_pacientes(trPaciente)
        var imc = paciente.pegaImc();
        trImc.textContent = imc;
        console.log(imc);
        });

}

Aqui esta a parte do html :

                <button id="calcula-imcs" onclick="calculaTodosImcs()" class="botao">Calcular Imcs</button>
            </section>
            <section>
                <h2>Adicionar novo paciente</h2>    
                <form>
                    <fieldset>
                        <label for="nome">Nome:</label>
                        <input id="campo-nome" type="text" placeholder="digite o nome do seu paciente">
                    </fieldset>
                    <fieldset class="campo-medio">
                        <label for="peso">Peso:</label>
                        <input id="campo-peso" type="text" placeholder="digite o peso do seu paciente">
                    </fieldset>
                    <fieldset class="campo-medio">
                        <label for="altura">Altura:</label>
                        <input id="campo-altura" type="text" placeholder="digite a altura do seu paciente">
                    </fieldset>
                    <button id="adicionar-paciente" class="botao bto-principal">Adicionar</button>
                </form>
            </section>
        </main>
    <script src="constroi-paciente.js"></script>
    <script src="percorre.js"></script>
    <script src="calcula-imc.js"></script>
    <script src="imprime.js"></script>
function constroi_pacientes(trPaciente){
    var tdNome = trPaciente.getElementsByClassName("info-nome")[0];
    var tdPeso = trPaciente.getElementsByClassName("info-peso")[0];
    var tdAltura = trPaciente.getElementsByClassName("info-altura")[0];
    var tdImc = trPaciente.getElementsByClassName("info-imc")[0];

    var paciente = { nome : tdNome.textContent,
                     peso : tdPeso.textContent,
                     altura : tdAltura.textContent, 
                     pegaImc : function(){
                         if (this.altura != 0) {
                            //altura > 0
                            var imcDoPaciente = this.peso/(this.altura*this.altura);
                            return imcDoPaciente;
                        } else {
                            console.log("Nao se pode dividir por 0");
                            //nao faz sentido dividir por altura negativa
                        }
                     }
                     };    
    return paciente;
}

var trsPacientes = document.getElementsByClassName("paciente");

for (posicaoDoTrAtual = 0; posicaoDoTrAtual <= trsPacientes.length - 1; posicaoDoTrAtual++) {
    var trPaciente = trsPacientes[posicaoDoTrAtual];
    var trImc = trPaciente.getElementsByClassName("info-imc")[0];
    var paciente = constroi_pacientes(trPaciente);
    var imc = paciente.pegaImc();
    trImc.textContent = imc;
    console.log(imc);

}

========================

function percorreArray(trsPacientes, comportamento){
    for (posicaoDoTrAtual = 0; posicaoDoTrAtual <= trsPacientes.length - 1; posicaoDoTrAtual++) {

    var trPaciente = trsPacientes[posicaoDoTrAtual];    

    comportamento(trPaciente);

    }
}

===========================

function calculaTodosImcs(){
 var trsPacientes = document.getElementsByClassName("paciente");    
        percorreArray(trsPacientes, function(trPaciente){
        var trImc = trPaciente.getElementsByClassName("info-imc")[0];
        constroi_pacientes(trPaciente)
        var imc = paciente.pegaImc();
        trImc.textContent = imc;
        console.log(imc);
        });

}

======================================

var trsPacientes = document.getElementsByClassName("paciente");

 percorreArray(trsPacientes, function (trPaciente){
    //constroi_pacientes(trPaciente)
    for (posicaoDoTrAtual = 0; posicaoDoTrAtual <= trsPacientes.length - 1; posicaoDoTrAtual++) {
        var trPaciente = trsPacientes[posicaoDoTrAtual];
        var paciente = constroi_pacientes(trPaciente);
        console.log(paciente.nome);    
    }

 });

O problema é que ao carregar a pagina ele mostra imcs calculados e ao clicar no botao ele altera esses valores, ou seja nao ta subindo zerado no começo, seria por que tem outras functions que fazem isso, como constroi paciente logo no começo com o for ?

3 respostas
solução!

Já resolvi heuehuehuh

Que bom Eduardo! Possui alguma dúvida ainda? Estava mandando uma resposta para você quando atualizei a página e vi que você ja tinha solucionado. Lembre-se apenas de fechar o tópico

Tudo ok por aqui, o problema estava que ao construir os pacientes, havia um for que efetuava o calculo do imc logo ao carregar a pagina, ao comenta-lo e deixar esta tarefa para calcula imcs com o uso do evento, os valores subirao zerados e obedeceram ao evento.