3
respostas

Ainda Campo Altura mesmo inválido continua sendo inserido no form.

Não consegui encontrar o erro!

var btnAdic = document.querySelector('#adicionar-paciente');
btnAdic.addEventListener('click', function (event) {
    event.preventDefault();

    var form = document.querySelector('#form-adiciona');

    var paciente = obtemPacienteDoFormulario(form);

    var pacienteTr = montaTr(paciente);

    var erros = validaPaciente(paciente);
    console.log(erros);
    if (erros.length > 0) {
        exibeMensagensDeErro(erros);

        return;
    }
    var tabela = document.querySelector('#tabela-pacientes');

    tabela.appendChild(pacienteTr);

    form.reset();
    var mensagensErro = document.querySelector('#mensagens-erro');
    mensagensErro.innerHTML = '';
})

function exibeMensagensDeErro(erros) {
    var ul = document.querySelector('#mensagens-erro');
    ul.innerHTML = ''; 

    erros.forEach(function (erro) {
        var li = document.createElement('li');
        li.textContent = erro;
        ul.appendChild(li);
    });

}

function obtemPacienteDoFormulario(form) {

    var 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) {

    var pacienteTr = document.createElement('tr');
    pacienteTr.classList.add('paciente');

    pacienteTr.appendChild(montaTd(paciente.nome, 'info-nome'));
    pacienteTr.appendChild(montaTd(paciente.peso, 'info-peso'));
    pacienteTr.appendChild(montaTd(paciente.altura, 'info-altura'));
    pacienteTr.appendChild(montaTd(paciente.gordura, 'info-gordura'));
    pacienteTr.appendChild(montaTd(paciente.imc, 'info-imc'));

    return pacienteTr;

}

function montaTd(dado, classe) {
    var td = document.createElement('td');
    td.textContent = dado;
    td.classList.add(classe);

    return td;
}

function validaPaciente(paciente) {

    var erros = [];

    if (paciente.nome.length == 0) {
        erros.push('Campo Nome não pode ser em branco!');
    }

    if (!validaPeso(paciente.peso)) {
        erros.push('Peso inválido!');
    }

    if (!validaAltura(paciente.altura)) {
        erros.push('Altura inválida!');
    }

    if (paciente.gordura.length == 0) {
        erros.push('Campo Gordura não pode ser em branco!');
    }

    if (paciente.peso.length == 0) {
        erros.push('Campo Peso não pode ser em branco!');
    }

    if (paciente.altura.length == 0) {
        erros.push('Campo Altura não pode ser em branco!');
    }
    return erros;
}
3 respostas

Bom dia Edson,

tente substituir 0 por null ou undefined nos campos de condicional da função validaPaciente(). O Javascript considera internamente 0 == null e 0 == undefined como false.

Segue uma lista de expressões, extraída do devmedia (link a baixo), que pode ajudá-lo a entender melhor o que estou dizendo, assim como me ajudou:

01 var var1 = 'true' == true;                 // false
02 var var2 = '0' == false;                   // true
03 var var3 = null == undefined;              // true
04 var var4 = false == null;                  // false
05 var var5 = null == 0;                      // false
06 var var6 = '' == 0;                        // true
07 var var7 = '\t\n' == 0;                    // true
08 var var8 = '1' == true;                    // true

Fonte: DevMedia

Boa tarde, Matheus.

Fiz conforme vc falou e substitui o 0 por null/ undefined e ainda tá aceitando, mas agora ele aceita todos os campos em branco e o resultado do imc ele põe como NaN.