Foros del Web » Programando para Internet » Jquery »

Enviar formulario despues de comprobar

Estas en el tema de Enviar formulario despues de comprobar en el foro de Jquery en Foros del Web. Como puedo hacer para que el formulario f2 se envie una vez que ya no hay errores. Todo funciona bien marcando los errores, pero cuan ...
  #1 (permalink)  
Antiguo 02/04/2020, 17:28
 
Fecha de Ingreso: enero-2008
Mensajes: 303
Antigüedad: 16 años, 10 meses
Puntos: 0
Enviar formulario despues de comprobar

Como puedo hacer para que el formulario f2 se envie una vez que ya no hay errores. Todo funciona bien marcando los errores, pero cuan do son subsanados no hace el submit. Gracias y un saludo

Código:
$(document).ready(function() {
  const f2 = $('#f2');

  f2.on('submit', event => {
    let errorCount = 0,
      requestPromiseArray = [];


event.preventDefault();
    f2.find('.concepto').each(function(i, elem) {
      elem.className = 'concepto pending';
      let conceptos = elem.value,
        requestPromise = $.post("procesa-gastosprivado.php", {
          conceptos
        }).then(function(mensaje) {
          errorCount += (mensaje == 'error') ? 1 : 0;

          elem.classList.remove('pending');
          elem.classList.add(mensaje);

        });
      requestPromiseArray.push(requestPromise);

    });


    return false;
  });

});
  #2 (permalink)  
Antiguo 02/04/2020, 19:11
Avatar de petit89  
Fecha de Ingreso: marzo-2011
Mensajes: 1.139
Antigüedad: 13 años, 9 meses
Puntos: 171
Respuesta: Enviar formulario despues de comprobar

Código Javascript:
Ver original
  1. $('#nombre_formulario').submit();

al final en un else donde ya no compruebe errores
__________________
█ WebHosting / Reseller a bajo costo | Uptime Garantizado | Soporte en Español e Ingles
¿Te sirvió la respuesta? Deja un +1 (Triangulo negro al lado derecho)
  #3 (permalink)  
Antiguo 06/04/2020, 08:18
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años, 8 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

Etiquetas: formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:10.