-
Notifications
You must be signed in to change notification settings - Fork 0
/
tarea-clase-6.js
168 lines (132 loc) · 4.95 KB
/
tarea-clase-6.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*
TAREA: Empezar preguntando cuánta gente hay en el grupo familiar.
Crear tantos inputs+labels como gente haya para completar la edad de cada integrante.
Al hacer click en "calcular", mostrar en un elemento pre-existente la mayor edad, la menor edad y el promedio del grupo familiar.
Punto bonus: Crear un botón para "empezar de nuevo" que empiece el proceso nuevamente, borrando los inputs ya creados (investigar cómo en MDN).
*/
/*
TAREA:
Crear una interfaz que permita agregar ó quitar (botones agregar y quitar) inputs+labels para completar el salario anual de cada integrante de la familia que trabaje.
Al hacer click en "calcular", mostrar en un elemento pre-existente el mayor salario anual, menor salario anual, salario anual promedio y salario mensual promedio.
Punto bonus: si hay inputs vacíos, ignorarlos en el cálculo (no contarlos como 0).
*/
function validarFormularioIntegrantes(event){
resetear()
const $cantidadIntegrantes = document.querySelector('#cantidad-integrantes')
const cantidadIntegrantes = Number($cantidadIntegrantes.value)
const errorIntegrantes = validarCantidadIntegrantes(cantidadIntegrantes)
const errores = {
integrantes : errorIntegrantes
}
const esExito = manejarErrores(errores,'#form-integrantes') === 0
if(esExito){
crearIntegrantes(cantidadIntegrantes)
}
event.preventDefault()
}
function validarFormularioEdades(event){
borrarPlaceHolder()
ocultarResultados()
const numeros = obtenerEdadesIntegrantes()
const errores = validarEdadesIntegrantes(numeros)
const esExito = manejarErrores(errores, '#form-edades') === 0
if(esExito){
mostrarEdad('mayor', obtenerMayorNumero(numeros))
mostrarEdad('menor', obtenerMenorNumero(numeros))
mostrarEdad('promedio', obtenerPromedio(numeros))
mostrarResultados()
}
event.preventDefault()
}
document.querySelector('#resetear').onclick = resetear;
function borrarIntegrantesAnteriores(){
const $integrantes = document.querySelectorAll('.integrante')
for(let i = 0; i < $integrantes.length; i++){
$integrantes[i].remove()
}
}
function crearIntegrantes(cantidad){
if(cantidad > 0){
mostrarBotonCalculo()
}else{
resetear()
}
for(let i = 0; i < cantidad; i++){
crearIntegrante(i)
}
}
function crearIntegrante(numero){
const $div = document.createElement('div')
$div.className = 'integrante'
$div.setAttribute('name',numero)
const $label = document.createElement('label')
$label.innerText = `Ingrese la edad del intengrante numero ${numero + 1 }`
const $input = document.createElement('input')
$input.type = 'number'
$div.appendChild($label)
$div.appendChild($input)
const $placeHolder = document.querySelector('#place-holder')
$placeHolder.appendChild($div)
}
function obtenerEdadesIntegrantes(){
const $integrantes = document.querySelectorAll('.integrante input')
let edades = []
for(let i = 0; i < $integrantes.length; i++){
if($integrantes[i].value != ''){
edades.push(Number($integrantes[i].value))
}else edades.push('')
}
return edades
}
function borrarPlaceHolder(){
const $errores = document.querySelectorAll('.contenedor-errores')
for (let i = 0; i < $errores.length; i++){
$errores[i].remove()
}}
function mostrarEdad(tipo, valor){
document.querySelector(`#${tipo}-edad`).textContent = valor
}
function ocultarBotonCalculo() {
document.querySelector('#calcular').className = 'oculto';
}
function mostrarBotonCalculo() {
document.querySelector('#calcular').className = '';
}
function ocultarResultados() {
document.querySelector('#analisis').className = 'oculto';
}
function mostrarResultados() {
document.querySelector('#analisis').className = '';
}
function resetear() {
borrarIntegrantesAnteriores();
ocultarBotonCalculo();
ocultarResultados();
borrarPlaceHolder();
}
function manejarErrores(errores, formulario){
let contador = 0
let formularioActual = document.querySelector(formulario)
const keys = Object.keys(errores)
keys.forEach(function(key){
const error = errores[key]
if(error){
contador++
formularioActual[key].className = 'error'
const $ul = document.createElement('ul')
$ul.className = 'contenedor-errores'
const $li = document.createElement('li')
$li.textContent = error
$ul.appendChild($li)
const $placeHolder = document.querySelector('#place-holder')
$placeHolder.appendChild($ul)
}else{
formularioActual[key].className = ''
}
})
return contador
}
$formIntegrantes = document.querySelector('#form-integrantes')
$formIntegrantes.onsubmit = validarFormularioIntegrantes
$formEdades = document.querySelector('#form-edades')
$formEdades.onsubmit = validarFormularioEdades