Solucionado (ver solución)
Solucionado
(ver solución)
3
respuestas

Lo que hicimos en aula sobre Validando datos en el formulario

Calcular imc

var titulo = document.querySelector('.titulo');
titulo.textContent = 'YeiJoa Buena Vida Nutrición';

var pacientes = document.querySelectorAll('.paciente');

//Este for encapsula estas variibles y los loops.
    for (var i=0; i<pacientes.length; i++){

        var paciente = pacientes[i];

        var tdPeso = paciente.querySelector('.info-peso');
        var peso = tdPeso.textContent;

        var tdAltura = paciente.querySelector('.info-altura');
        var altura = tdAltura.textContent;        

        var tdIMC = paciente.querySelector('.info-imc');

//Estas validaciones internas en el ciclo for.

        pesoEsVálido = validarPeso(peso);
        alturaEsVálida = validarAltura(altura);
            //ATENTOS, el if entra si muestra lo incorrecto, entonces la LÓGICA debe cambiar debemos pedir lo contrario, con el cierre del signo de admiración(!) = NO.
            //if ((peso < 0) || (peso > 1000)){
            if (!pesoEsVálido){    
                    console.log('Peso incorrecto');
                tdIMC.textContent = 'Peso incorrecto';
                pesoEsVálido = false;
                paciente.classList.add('paciente-incorrecto')
            }

            //if ((altura < 0) || (altura > 3.00)){
            if (!alturaEsVálida){
                    console.log('Altura incorrecta');
                tdIMC.textContent = 'Altura incorrecta';
                alturaEsVálida = false;
                paciente.classList.add('paciente-incorrecto')
            }

            if (pesoEsVálido && alturaEsVálida){               
                tdIMC.textContent = calcularIMC(peso,altura);
            }

        }
//Aquí es la función encapsulada para usar varias veces. Faltaria solo que el pacienteTr adopte otro hijo ms con el .appendChild. Y cómo ya tenemos archivos clasificados eso lo encontraremos en Form.js
    function calcularIMC(peso,altura){
        var imc = peso / (altura * altura);
            console.log(imc);
            return imc.toFixed(2);
    }

// Aquí la función de validar. Cómo se ha invertido el sentido de la lógica debe retornar verdadero, si no falso. Ojo como se cambia la Lógica también deben cambiar los signos.
    function validarPeso(peso){
        if (peso >= 0 && peso < 1000){
            return true;
        } else{
            return false;
        }
    }

    function validarAltura(altura){
        if (altura >= 0 && altura < 3.00){
            return true;
        } else{
            return false;
        }
    }
3 respuestas

Formulario

var botonAdicionar = document.querySelector("#adicionar-paciente");

    botonAdicionar.addEventListener('click',function(event){
        event.preventDefault();//Esto previene el padrón.

        var form = document.querySelector("#form-adicionar");
        var paciente = capturarDatosPaciente(form);
            console.log(paciente);
        var pacienteTr = ConstruirTr(paciente);
//Aquí la llamada de la función vara validarpaciente, para lo cual se debe crear un nuevo validador y se debe aplicar la misma lógica de cambio para entrar al if, cuando se verdadero por eso niego el validador.

        var errores = validarPaciente(paciente);
            console.log(errores);//Es  importante para imprimir en la consola y ver el ARRAY.
        //Recordar que un string es un array de caracteres.

        if(errores.length > 0){
             console.log('paciente incorrecto');
             exhibirMensajesErrores(errores); //Si hay errores el tamaño es mayor que 0, va entrar aqui y corta el evento y no entran los datos.
             return;
            }            //Este return vacío hace referencia a la función anónima.
        var tabla = document.querySelector("#tabla-pacientes");
        tabla.appendChild(pacienteTr);
        form.reset();

        //AJUSTE FINO DE LA FUNCION.L
        var mensajesErrores = document.querySelector("#mensajes-errores");
        mensajesErrores.innerHTML = '';
    });

    function capturarDatosPaciente(form){
        //Capturando los datos del formulario.
        var paciente = {
            nombre: form.nombre.value,
            peso: form.peso.value,
            altura: form.altura.value,
            gordura: form.gordura.value,
            imc: calcularIMC(form.peso.value,form.altura.value),
        } 
            return paciente;
        }

    function ConstruirTr(paciente){

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

        pacienteTr.appendChild(construirTd(paciente.nombre,'info-nombre'));
        pacienteTr.appendChild(construirTd(paciente.peso,'info-peso'));
        pacienteTr.appendChild(construirTd(paciente.altura,'info-altura'));
        pacienteTr.appendChild(construirTd(paciente.gordura,'info-gordura'));
        pacienteTr.appendChild(construirTd(paciente.imc,'info-imc'));

        return pacienteTr;
    }

    function construirTd(dato,clase){
        var td = document.createElement('td');
            td.classList.add(clase);
            td.textContent = dato;

        return td;
}
//Esta función validarPaciente recibe como parámetro paciente y colocamos un validador y aquí vamos a llamar a cada una de las funciones que hemos creado en calcular-imc: validarPeso(peso) y validarAltura(altura).
    function validarPaciente(paciente){
        var errores = []
        if(paciente.nombre.length ==0){
            errores.push('Agregar nombre, por favor');
        }

        if(paciente.peso.length ==0){
            errores.push('Agregar peso, por favor');
        }

        if(paciente.altura.length ==0){
            errores.push('Agregar altura, por favor');
        }

        if(paciente.gordura.length ==0){
            errores.push('Agregar % gordura, por favor');
        }

        if(!validarPeso(paciente.peso)){
            errores.push('El peso es incorrecto');
        }

        if(!validarAltura(paciente.altura)){
            errores.push('La altura es incorrecta');
        }

        return errores;
    }

    //OJO CON LAS LLAVES, DEBEN ENGLOBAR LA FUNCION Y LOS VALIDADORES.
    //Arriba se requiere crear la llamada de la función, para lo que se crea un nuevo validador. Pero ya eliminado el true en el validador para la llamada de la función se crea una variable que es var error, pero ¿cómo hacemos para replicar eso a los otros campos.

    //CREAMOS UNA VAR ERRORES y que sea un ARRAY y con la función .push le agregamos todos los campos, y para eso ya no necesito el else.

    //Esta funcion de exhibirMensajesErrores va a revibir como parámetros los errores que vienen de la función, y creamos la VAR UL.
    function exhibirMensajesErrores(errores){
        var ul = document.querySelector("#mensajes-errores");
        ul.innerHTML = '';//Se deja en 0 para que cierre la lista.


    //pero aqui vamos a usar el foreach, es más usada que for porque es más simple.
        errores.forEach(function(error){
            var li = document.createElement('li');
            li.textContent = error;
            ul.appendChild(li);
        });
    }
solución!

Hola Yeimer, espero que estés bien! Gracias por compartir tu código con nosotros. Si tiene alguna pregunta sobre el contenido del curso, estamos aquí para ayudarlo. ¡Sigue practicando! ¡Vamos juntos!

Si este post te ayudó, por favor, marca como solucionado ✓.

Gracias Yeimer.