Foros del Web » Programando para Internet » Javascript »

ejecutar 2 submit, solo me hace 1

Estas en el tema de ejecutar 2 submit, solo me hace 1 en el foro de Javascript en Foros del Web. que tal amigos, tengo un formulario que debe mandar a 2 paginas los datos y mostrar las 2 paginas en una ventana nueva la razon ...
  #1 (permalink)  
Antiguo 07/12/2012, 13:05
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
ejecutar 2 submit, solo me hace 1

que tal amigos, tengo un formulario que debe mandar a 2 paginas los datos y mostrar las 2 paginas en una ventana nueva la razon es por que se generan 2 pdf

ahora lo tengo de esta forma:

Código HTML:
Ver original
  1. <form id="fm_baja" name="fm_baja" method="post" onsubmit="this.submit(); this.action='pag1.php'; this.target='_blank'; this.submit(); this.action='pag2.php'; this.target='_blank';">
  2. ......
  3. </form>

pero ahora solo muestra la pag 2

saben que me falta para que me muestre la otra pag tambien

gracias
  #2 (permalink)  
Antiguo 07/12/2012, 13:22
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: ejecutar 2 submit, solo me hace 1

Hola:

Cuando se hace el primer submit hacia la página actual, todo lo demás deja de funcionar (se pierde el foco)... si quieres hacer más de un submit, los primeros deben ser, sí o sí a otro target... sólo el último puede ser al "_self"... y sin necesidad del método "submit()"...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 07/12/2012, 14:26
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: ejecutar 2 submit, solo me hace 1

hola caricatos gracias por tu aclaración

mira por lo que te entendí, hice esta modificación:

Código Javascript:
Ver original
  1. onsubmit="this.submit(); this.action='pag2.php'; this.target='_blank'; this.action='pag1.php'; this.target='_self';"

pero solo me muestra la pag1 en la misma ventana, que esta bien, pero falta que me abra una ventana con la pag2

gracias por tu tiempo

Última edición por catpaw; 07/12/2012 a las 14:53
  #4 (permalink)  
Antiguo 07/12/2012, 15:03
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: ejecutar 2 submit, solo me hace 1

y bueno también no se cual sea el orden correcto ya estuve intercambiando y nada me saca solo el ultimo accion que encuentra
  #5 (permalink)  
Antiguo 07/12/2012, 17:38
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Respuesta: ejecutar 2 submit, solo me hace 1

Hola:

Sin mirar mucho, de la serie acciones que se ejecutan durante el evento, "this.submit()" es innecesario en el evento submit...

Vas a adelantar mucho quitando eso...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #6 (permalink)  
Antiguo 07/12/2012, 18:31
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ejecutar 2 submit, solo me hace 1

La clave pasa como te ha dicho @caricatos en utilizar diferentes targets.
También tenés que evitar el submit natural de un form que realiza un input type='submit' ó un <button>enviar</button>, quedando como alternativa un input type="button" con un evento onclik. Luego creo que es más prolijo si integrás todo en una función, podés pasar a 2, 3 ó mas páginas definiendo diferentes actions y que cada una reciba solo los datos que correspondan

Ejemplo

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2.    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
  4. <meta http-equiv='Content-Type' content='text/html; charset=utf-8' />
  5. <title>Multiple submit</title>
  6.  
  7. <script type='text/javascript'>
  8. //<![CDATA[
  9.  
  10. function EnviarForm(){
  11.    
  12.        document.forms['contacto'].action='action1.php';
  13.        document.forms['contacto'].target='resultado1';
  14.        document.forms['contacto'].submit();
  15.  
  16.        document.forms['contacto'].action='action2.php';
  17.        document.forms['contacto'].target='resultado2';
  18.        document.forms['contacto'].submit();
  19.  
  20.        document.forms['contacto'].action='action3.php';
  21.        document.forms['contacto'].target='resultado3';
  22.        document.forms['contacto'].submit();
  23.  
  24.    return true;
  25. }
  26. //]]>
  27. </head>
  28. <form id='contacto' action='#' method='post' name="contacto">
  29. <fieldset><legend>Multiple submit</legend> <label for='nombre'>Nombre:</label><br />
  30. <input type='text' name='nombre' id='nombre' maxlength="50" /><br />
  31. <label for='email'>Email</label><br />
  32. <input type='text' name='email' id='email' maxlength="50" /><br />
  33. <label for='telefono'>Teléfono:</label><br />
  34. <input type='text' name='telefono' id='telefono' maxlength="15" /><br />
  35. <input type='button' name='procesar' value='procesar' onclick='return EnviarForm();' /></fieldset>
  36. </form>
  37. <iframe name='resultado1' id="resultado1" width="200" height="200"></iframe> <iframe name='resultado2' id="resultado2" width='200' height='200' src="about:blank"></iframe> <iframe name='resultado3'
  38. id="resultado3" width='200' height='200' src="about:blank"></iframe>
  39. </body>
  40. </html>

tus action1.php, action2.php y action3.php serían

Código PHP:
Ver original
  1. <?php
  2. echo "Nombre: " . $_POST['nombre'];
  3. ?>
Código PHP:
Ver original
  1. <?php
  2. echo "Email: " . $_POST['email'];
  3. ?>
Código PHP:
Ver original
  1. <?php
  2. echo "Telefono: " . $_POST['telefono'];
  3. ?>

Demo
http://foros.emprear.com/html/multi-submit/


igual quizás puedas hacer todo desde el mismo php
Salu2
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 10/12/2012, 08:47
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: ejecutar 2 submit, solo me hace 1

hola gracias por sus respuestas!

emprear, hice las modificaciones que me recomendaste, pero no se porque sigo sin conseguir que la pagina2 me salga en un _blank, la pagina1 sale en self pero la dos nada.

mira asi tengo el codigo:

Código HTML:
Ver original
  1. <form id="fm_baja" name="fm_baja" action="#" method="post">
  2. ...
  3.     <input type="button" value="Imprimir" onClick="return envio_form()" />
  4. </form>

Código Javascript:
Ver original
  1. function envio_form(){
  2.     document.forms['fm_baja'].action='pag2.php';
  3.     document.forms['fm_baja'].target='_blank';
  4.     document.forms['fm_baja'].submit();
  5.     document.forms['fm_baja'].action='pag1.php';
  6.     document.forms['fm_baja'].target='_self';
  7.     document.forms['fm_baja'].submit();
  8.     return true;
  9. }

Solo manda la pag1 en self, no pela la pag2 :C

Editooo: Acabo de ver que en explorer 9 si lo hace, pero en chrome (que es donde estaba probando) es donde no hace el _blank de la pag 2 :C

Última edición por catpaw; 10/12/2012 a las 08:54
  #8 (permalink)  
Antiguo 10/12/2012, 12:09
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ejecutar 2 submit, solo me hace 1

No, en realidad funciona bien en todos los navegadores.
El problema que puede presentarse es que al estar configurado el navegador para abrir una nueva ventana en una pestaña, se abra justamente una vueva pestaña haciéndote perder el foco de la página que contenía el form.
La única opción que te quedaría es utilizar window.open() y hacer del nombre de esa ventana el target del submit(). Por supuesto eso conlleva optro inconveniente, como es el posible bloqueo de popups por parte del navegador.

mirá el mismo ejemplo con la siguiente modificación en la script

Código Javascript:
Ver original
  1. <script type='text/javascript'>
  2. //<![CDATA[
  3.  
  4. function EnviarForm(){
  5.    
  6.         document.forms['contacto'].action='action1.php';
  7.         document.forms['contacto'].target='resultado1';
  8.         document.forms['contacto'].submit();
  9.  
  10.         document.forms['contacto'].action='action2.php';
  11.         document.forms['contacto'].target='resultado2';
  12.         document.forms['contacto'].submit();
  13.  
  14.         document.forms['contacto'].action='action3.php';
  15.         window.open('about:blank','nv','width=500,height=500');
  16.         document.forms['contacto'].target='nv';
  17.         document.forms['contacto'].submit();
  18.  
  19.     return true;
  20. }
  21. //]]>
  22. </script>

Su ya has estado viendo mi ejemplo, te recomiendo vacies la cache del navegador antes de probar nuevamente

http://foros.emprear.com/html/multi-...ulti-form.html
Probado con IE/FF/Chrome y Opera

notá que en el popup solo aparece el valor de la variable teléfono y este ya no se muestra en el iframe de la página principal.

Aunque insisto, si se supiese exactamente cuual es el objeto de tu aplicación, quizás la solución sea otra

SAlu2
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 10/12/2012, 13:33
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: ejecutar 2 submit, solo me hace 1

hola emprear, voy a checar lo del window.open, mientras te explico un poco mi aplicacion

Se supone que es un formulario que recaba cierta información, esta información debe ser recibida por 2 paginas, que a su ves generaran un pdf (cada una).

Del lado del usuario la información la voy pidiendo por pasos.

formular.php

Código HTML:
Ver original
  1. <form >
  2.      <div id="paso1">
  3.         Valor 1<input id="uno" name="uno" />
  4.         Valor 2<input id="dos" name="dos" />
  5.         <a href="#">Paso 2-></a>
  6.      </div>
  7.      <div id="paso2" style="display:none">
  8.         Valor 3
  9.         <select id="tres" name="tres">
  10.              <option value="algo">algo</option>
  11.         </select>
  12.         Valor 4
  13.         <select id="cuatro" name="cuatro">
  14.              <option value="algo">algo</option>
  15.         </select>
  16.         <a href="#">Paso 3-></a>
  17.      </div>
  18.      <div id="paso3" style="display:none">
  19.         Valor 5<input id="cinco" id="cinco" />
  20.         Valor 6<input id="seis" id="seis" />
  21.         <a href="#">Paso 4-></a>
  22.      </div>
  23.      <div id="paso4" style="display:none">
  24.         <input type="button" value="imprimir" onclick="return envio_form()" />"
  25.      </div>
  26. </form>

el div id="paso1" que recoge la primer parte de la info, después al dar clic al paso2 escondo el paso1 y muestro el 2 y asi hasta el 4 que es donde esta el boton que tiene la funcion para el submit:

Código Javascript:
Ver original
  1. function envio_form(){
  2.     document.forms['fm_baja'].action='pag2.php';
  3.     document.forms['fm_baja'].target='_blank';
  4.     document.forms['fm_baja'].submit();
  5.     document.forms['fm_baja'].action='pag1.php';
  6.     document.forms['fm_baja'].target='_self';
  7.     document.forms['fm_baja'].submit();
  8.     return true;
  9. }

y pag1 y pag2 reciben las variables igual y cada una hace genera el pdf con formatos distintos pero con la misma info

Código PHP:
Ver original
  1. $uno= $_POST['uno'];
  2. $dos= $_POST['dos'];
  3. $tres= $_POST['tres'];
  4. $cuatro= $_POST['cuatro'];
  5. $cinco= $_POST['cinco'];
  6. $seis= $_POST['seis'];
  7. //hago un echo de variables en las dos paginas

Ahora tengo dos problemas:

1.- El que menos me preocupa, como ya lo mencione chrome no saca la pag2

2.-El que mas me preocupa, en chrome al hacer el echo veo que recibo todas las variables, pero en explorer en el echo veo que solo recibo las variables $uno y $dos, las demas no se reciben.

a que se debera esto?
  #10 (permalink)  
Antiguo 10/12/2012, 14:21
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: ejecutar 2 submit, solo me hace 1

Bueno, depure un poco el código y borre el cache y ya me funciono en explorer y sobre el problema que comentaba ya recibo bien las variables (ie), parece que trabaja bien, pero me quedo con la desconfianza de si por este método no se puedan perder variables en dado caso??

gracias por su tiempo
  #11 (permalink)  
Antiguo 10/12/2012, 15:14
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ejecutar 2 submit, solo me hace 1

mirá. mucho no lo entiendo, las variables si pàsan, la prueba la tenés en la demo que te dejé, y cada página recibe por post las que vos decidas.
Supongo que trabajas con alguna librería(tcpdf ó similar)
Lo que pregunto es lo siguiente, la/s nueva/s ventana/s estan para generar las descargas de los pdf, o para mostrar alguna información al usuario también? no veo que objeto cumplen

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #12 (permalink)  
Antiguo 10/12/2012, 19:06
Avatar de catpaw  
Fecha de Ingreso: mayo-2010
Ubicación: xalapa
Mensajes: 856
Antigüedad: 14 años
Puntos: 23
Respuesta: ejecutar 2 submit, solo me hace 1

Si mira, en las ventanas se muestra el pdf resultante, con la información que el usuario ingreso (hay mismo tienen la opción de imprimir o guardar), aunque la información es la misma el formato o diseño de cada pdf es diferente, mi duda sobre valores perdidos es mas que nada por que que antes esto yo lo hacia algo así:

juntaba todas las variables mediante document.getElementById y las pasaba asi

var URL1='pag1.php?uno='+uno+'&dos='+dos+'&tres='+tres +'&cuatro='+cuatro+'&cinco='+cinco;
var URL2='pag2.php?uno='+uno+'&dos='+dos+'&tres='+tres +'&cuatro='+cuatro+'&cinco='+cinco;

var sValue1 = window.open(URL1,'',"dependent=yes,resizable=no,le ft=5,top=5,height=700,width=1000,scrollbars=yes");
var sValue2 = window.open(URL2,'',"dependent=yes,resizable=no,le ft=100,top=205,height=550,width=1000,scrollbars=ye s");

y a veces llegaban las variables y a veces las perdía, entonces mejor decidi hacer el proceso por post, por eso la razon de los dos submit

Ya estuve probando en ie9 y ie8 y al parecer todo va bien, por el momento no me preocupa tanto que chrome no lo haga del todo bien ya que en mi trabajo lo que se usa es ie.

Eso es en resumen

ah! la librería que ocupo es fpdf

gracias por tu tiempo emprear
  #13 (permalink)  
Antiguo 10/12/2012, 19:29
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: ejecutar 2 submit, solo me hace 1

Eso cambia por completo la situación, vos no descargás, ese es un paso posterior.
y todo esto
var URL2='pag2.php?uno='+uno+'&dos='+dos+'&tres='+tres +'&cuatro='+cuatro+'&cinco='+cinco;
no es necesario, si usas un form ya sea con post o get, los valores de los campos se pasan igual, tené en cuenta que al hacer

document.forms['contacto'].action='action3.php';

vos no estás definiendo un link cualquiera sino un "action" contra el cual se hará el submit y todos los campos de tu form que tengan un "name" definido, serán recibidos por tu php (en chrome funciona perfectamente igual)

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: formulario, php, submit
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:15.