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

Usar "calcula-imc.js" para calcular o IMC do novo paciente?

Como ficaria o código caso no lugar de:

campoPeso.value/(campoAltura.value*campoAltura.value)

usar a fuction montaPaciente no arquivo "calcula-imc.js"?

Segue o código:

//adiciona.js

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

event.preventDefault(); // impede comportamento padrão

            //adicionando os campos do fromulario
var campoNome = document.querySelector("#campo-nome");
var campoPeso = document.querySelector("#campo-peso");
var campoAltura = document.querySelector("#campo-altura");

    if (campoNome.value != "" || campoPeso.value != "" || campoAltura.value != ""){

        var trDoNovoPaciente = document.getElementsByTagName("paciente")[0];
        var pacienteNovo = "<tr class='paciente'>"+
                              "<td class='info-nome'>" +campoNome.value+ "</td>"+ //recebe o valor do campo do formulario atraves do campoNome.value
                              "<td class='info-peso'>"+campoPeso.value+"</td>"+
                              "<td class='info-altura'>"+campoAltura.value+"</td>"+
                              "<td class='info-imc'>"+campoPeso.value/(campoAltura.value*campoAltura.value)+"</td>"+
                               "</tr>";

        //adicionar o paciente novo a tabela html
        var todosPacientes = document.querySelector("table"); //seleciona sempre o primeiro elemento
        todosPacientes.innerHTML = todosPacientes.innerHTML + pacienteNovo;     


        //limpar o formulario apos adicionar
        campoNome.value = "";
        campoPeso.value = "";
        campoAltura.value = "";
    }else{
        alert("Por favor preencha com seus dados: Nome, Peso e Altura!");
        console.log("Por favor preencha com seus dados: Nome, Peso e Altura!");
    }
});

//calcula-imc.js

var botao = document.getElementById("calcula-imcs");

botao.addEventListener("click", function () {

    //tr dos pacientes
    var trsPacientes = document.getElementsByClassName("paciente");

    //usa percorre.js passando trsPacientes e função imprimeEModificatdDeImc
    percorreArray(trsPacientes, imprimeEModificaTdDeImc);

    function imprimeEModificaTdDeImc(pacienteTr){

        var pacienteAtual = montaPaciente(pacienteTr);    
        var imc = pacienteAtual.pegaImc();

        var tdImc = pacienteTr.getElementsByClassName("info-imc")[0]; 
        tdImc.textContent = imc;

        console.log(imc);
    }

    function montaPaciente(pacienteTr){
        var tdNome = pacienteTr.getElementsByClassName("info-nome")[0]; 
        var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0]; 
        var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0];

        var paciente = {
            nome : tdNome.textContent, 
            peso : tdPeso.textContent, 
            altura : tdAltura.textContent,
            pegaImc: function() {

                if(this.altura != 0){
                    var imc = this.peso / (this.altura * this.altura);
                    return imc;
                } else{

                    console("Não posso dividir por zero!");
                }
            }
        }
        return paciente;
    };
});
2 respostas
solução!

Olá, Ronaldo! Tudo bem, cara? =)

Acredito que isso que você está interessado em fazer não será possível... =|

Repare na função montaPaciente():

function montaPaciente(pacienteTr) {
    var tdNome = pacienteTr.getElementsByClassName("info-nome")[0];
    var tdPeso = pacienteTr.getElementsByClassName("info-peso")[0];
    var tdAltura = pacienteTr.getElementsByClassName("info-altura")[0];

    var paciente = {
        nome : tdNome.textContent;
        peso : tdPeso.textContent;
        altura : tdAltura.textContent;
        pegaImc : function() {
            if (this.altura != 0) {
                var imc = this.peso / (this.altura * this.altura);
                return imc;
            } else {
                console.log ("Não posso dividir por zero!");
            }
        }
    }

    return paciente;
}

Observe que essa função recebe como parâmetro um pacienteTr, que deve ser a <tr> que representa um paciente na tabela... E ela retorna um objeto Paciente. Então, basicamente o que essa função faz é receber um HTML e devolver um objeto.

var pacienteNovo =
    "<tr class='paciente'>"+
        "<td class='info-nome'>" + campoNome.value + "</td>" +
        "<td class='info-peso'>" + campoPeso.value + "</td>" +
        "<td class='info-altura'>" + campoAltura.value + "</td>" +
        "<td class='info-imc'>" + campoPeso.value / (campoAltura.value * campoAltura.value) + "</td>" +
    "</tr>";

Já o código acima, onde se encontra o trecho que você mencionou - campoPeso.value / (campoAltura.value * campoAltura.value) - faz o processo contrário, ou seja, estamos criando um código HTML (

`), no caso, à partir de um formulário. Entendeu? =)

Espero ter ajudado, mas qualquer dúvida que possa ter restado não deixe de postar aqui no fórum para que nós possamos ajudá-lo! =)

Abraço e bons estudos,

Fábio

Obrigado Fábio!

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