Sei que já houve uma postagem sobre isso, mas a própria pessoa que postou disse que resolveu e acabou ficando sem uma explicação clara sobre o como isso foi feito. O cálculo de IMC de qualquer paciente novo inserido na lista retorna como NaN, apesar de eu ter definido a variável imc como 0 (logo, um número). O que fazer?
Arquivo calcula-imc.js:
let titulo = document.querySelector(".titulo")
titulo.textContent = 'Aparecida Nutricionista'
let pacientes = document.querySelectorAll('.paciente')
for (let i = 0; i < pacientes.length; i++) {
let paciente = pacientes[i]
let tdPeso = paciente.querySelector('.info-peso')
let peso = tdPeso.textContent
let tdAltura = paciente.querySelector('.info-altura')
let altura = tdAltura.textContent
let tdImc = paciente.querySelector('.info-imc')
let pesoEhValido = true
let alturaEhValida = true
if (peso <= 0 || peso >= 1000) {
console.log('Peso inválido')
pesoEhValido = false
tdImc.textContent = 'Peso Inválido!'
paciente.classList.add('paciente-invalido')
}
if (altura <= 0 || altura >= 3.00) {
console.log('Altura inválida')
alturaEhValida = false
tdImc.textContent = 'Altura Inválida!'
paciente.classList.add('paciente-invalido')
}
if (alturaEhValida && pesoEhValido) {
let imc = calculaImc(peso, altura)
tdImc.textContent = imc
}
}
function calculaImc(peso, altura) {
let imc = 0
imc = peso / (altura * altura)
return imc.toFixed(2)
}
Arquivo form.js:
let botaoAdicionar = document.querySelector('#adicionar-paciente')
botaoAdicionar.addEventListener('click', function (event) {
event.preventDefault();
let form = document.querySelector('#form-adiciona')
//Extraindo informações do paciente do form
let paciente = obtemPacienteDoFormulario(form)
console.log(paciente)
//Cria a tr e a td do paciente
let pacienteTr = montaTr(paciente)
//Adicionando o paciente na tabela
let tabela = document.querySelector('#tabela-pacientes')
tabela.appendChild(pacienteTr)
console.log(pacienteTr)
})
function obtemPacienteDoFormulario(form) {
let paciente = {
nome: form.nome.value,
peso: form.peso.value,
altura: form.altura.value,
gordura: form.gordura.value,
imc: calculaImc(form.peso.value, form.altura.value)
}
return paciente
}
function montaTr(paciente) {
let pacienteTr = document.createElement('tr')
let nomeTd = document.createElement('td')
let pesoTd = document.createElement('td')
let alturaTd = document.createElement('td')
let gorduraTd = document.createElement('td')
let imcTd = document.createElement('td')
nomeTd.textContent = paciente.nome
pesoTd.textContent = paciente.peso
alturaTd.textContent = paciente.altura
gorduraTd.textContent = paciente.gordura
imcTd.textContent = calculaImc(peso, altura)
pacienteTr.appendChild(nomeTd)
pacienteTr.appendChild(pesoTd)
pacienteTr.appendChild(alturaTd)
pacienteTr.appendChild(gorduraTd)
pacienteTr.appendChild(imcTd)
return pacienteTr
}