Ver Mensaje Individual
  #9 (permalink)  
Antiguo 06/05/2021, 11:09
melkart239
 
Fecha de Ingreso: noviembre-2014
Ubicación: Madrid
Mensajes: 81
Antigüedad: 9 años, 5 meses
Puntos: 1
Respuesta: Botón que hace cálculos necesita recargar la página

He solucionado mis problemas. Eran dos fallos.
Problema 1 (necesidad de refrescar la página si cambiaba algo en el formulario):
- lo que hacía era crear un array, al inicio de $document.ready, para cada producto con sus datos básicos (altura, unidades por fila, etc)
- luego al hacer click en "calcular", con el ánimo de preservar los datos básicos iniciales, creaba otro array por producto (y aquí estaba el fallo) igual al original. Es decir, si los datos básicos del producto 1 era el array "po1" hacía "var p1=po1". Y así con el resto de productos.
- luego hacía las posibles combinaciones por alturas y si 2 productos combinaban, ponía sus alturas a 0 para que ya no entraran otra vez en los cálculos de más combinaciones de productos
- ¿qué ocurría?
- que si ponía la altura del array del producto para los cálculos "p1" a 0, también se ponía a 0 la altura del array original "po1"
- si cambiaba algún valor de un producto en el formulario y volvía a darle al botón de calcular, dado que los productos que combinaban tenían altura=0 ya no entraban en los cálculos
CONCLUSIÓN: no es lo mismo hacer "var p1=p01" que "var p1=po1.slice(x, y)". Porque digamos que slice no "vincula" los valores del array original y el del "destino".
Error de novato.

Problema 2 (al darle al botón de calcular por segunda vez se repetían las combinaciones entre productos):
- lo que hacía era al combinar dos o más productos, según alturas, mediante un "append" los ponía en su div correspondiente
- al darle por segunda vez a calcular, ya estaban ahí y volvían a repetirse
- lo solucioné con un "remove" en los divs correspondientes
CONCLUSIÓN: si añades algo en el DOM y necesitas "recalcular" lo hecho, no se te olvide eliminarlo antes.
Error de novato.

Espero que mi experiencia os sirva de ayuda.
Gracias por todo y cuidaos mucho.