Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/04/2020, 08:18
prueba230683
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 7 meses
Puntos: 68
Respuesta: Enviar formulario despues de comprobar

Este es un caso complicado, puesto que tienes más de una promesa y por tanto debes esperar a que se resuelvan todas para decidir si envías o no el formulario. Esto se hace con Promise.all:


Código Javascript:
Ver original
  1. $(document).ready(function() {
  2.     const f2 = $('#f2');
  3.     f2.on('submit', event => {
  4.         event.preventDefault(); // por defecto, cancelamos el envio del formulario
  5.         let errorCount = 0, // iniciamos el contador de errores
  6.             requestPromiseArray = [];
  7.         f2.find('.concepto').each(function(i, elem) {
  8.             elem.className = 'concepto pending';
  9.             let conceptos = elem.value,
  10.                 requestPromise = $.post("procesa-gastosprivado.php", {
  11.                     conceptos
  12.                 }).then(function(mensaje) {
  13.                     errorCount += (mensaje == 'error') ? 1 : 0;
  14.                     elem.classList.remove('pending');
  15.                     elem.classList.add(mensaje);
  16.                 });
  17.             requestPromiseArray.push(requestPromise);
  18.         });
  19.         Promise.all(requestPromiseArray).then(function(){ // cuando todas las promesas se hayan resuelto
  20.              if(errorCount == 0) // si no hay ningun error, enviamos el formulario
  21.                   $('#f2').get(0).submit();
  22.         });
  23.     });
  24. });

Nota: la implementación de jQuery del método submit() dispara los handlers del evento "submit". En cambio, la implementación nativa del método submit NO dispara los handlers del evento submit. Como queremos que no se disparen los handlers del evento submit, debemos utilizar $('#f2').get(0).submit(), de esta forma operamos con el método submit nativo.

Última edición por prueba230683; 06/04/2020 a las 08:44