Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > HTML, Javascript y otros
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-12-2006
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 19
elcigarra Va por buen camino
Reset y submit en un botón

Amigos, tengo un formulario que pasa a una página php que "hace cosas" y manda un saludo... bueno, clásico.

El caso es que muchos de los visitantes de mi página repiten (envían) el formulario más de una vez. Le dije a un amigo que probara esa parte del sitio y me comentó que después del saludo fue a la página anterior (la del formulario) y como estaban todos los datos que el había puesto, por un momento le quedó la duda de si el formulario se había mandado efectivamente.

¿Hay alguna forma de que antes de enviarse, el formulario se resetee?. Algo como poner un boton de Reset y Submit al mismo tiempo.
Responder Con Cita
  #2  
Antiguo 10-12-2006
Avatar de JavierB
JavierB JavierB is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 99
Poder: 21
JavierB Va por buen camino
Hola elcigarra

Tienes dos posibilidades, utilizar un botón normal de esta forma:

Código:
<input type="button" value="Enviar" onclick="this.form.submit(); this.form.reset()" />
o dehabilitar el botón submit para que no se pueda volver a pulsar:

Código:
<input type="submit" onclick="this.disabled=true" />
Saludos, :adios:
__________________
Lo importante no es saber, sino tener el e-mail del que sabe.
Responder Con Cita
  #3  
Antiguo 11-12-2006
[kayetano] kayetano is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Elche
Posts: 644
Poder: 21
kayetano Va por buen camino
Hola

Cita:
Empezado por javierB
Tienes dos posibilidades, utilizar un botón normal de esta forma:

Código:
<input type="button" value="Enviar" onclick="this.form.submit(); this.form.reset()" />
No lo he probado pero no parece una solución válida, me parece que enviará un formulario vacio.

Cita:
Empezado por javierB
o dehabilitar el botón submit para que no se pueda volver a pulsar:

Código:
<input type="submit" onclick="this.disabled=true" />
Tampoco tengo claro que esto funcione, ya que tu problema es al volver y no se si el estado del boton permanecerá desactivado.

La solución que yo te propongo es más complicada que estas dos y no la he probado por lo que no se si funcionará:
La idea es hacer tantos INPUTs ocultos como INPUTs visibles hayan, una vez se pulsa el botón de enviar y con javascript copias el contenido de los inputs visibles en los inputs ocultos, borras el contenido de los inputs visibles y envias el formulario.
__________________
Salu2
KAYETANO

Cómo hacer preguntas de manera inteligente
Responder Con Cita
  #4  
Antiguo 11-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues luego de probar con varias cosas, por ejemplo tratar de que la página del formulario no fuera guardada en el caché del navegador... sin resultado, se me ocurrió una solución que acaso no sea muy elegante, pero, en fin, parecía funcionar... como no podía ser de otro modo:

Código:
  <script type="text/javascript">
  
  function LimpiarFormulario(idFormulario) {
    return;
    frm = document.getElementById(idFormulario);
    if(frm) {
      for (i = 0; i < frm.elements.length; i++) {
        if(frm.elements[i].type === 'text')
          frm.elements[i].value = '';
      } 
      return true;    
    }
    return false;
  }
  
  </script>
Efectivamente, ejecutar la función "LimpiarFormulario" cada que se cargara la página Web: utilizando el evento "OnLoad" de "BODY".

Pero, resulta que probé después lo que el compañero JavierB propone, esto es, algo así:

Código:
<input type="button" onclick="this.form.submit(); this.form.reset();" value="Enviar" />
Y la cosa también parece funcionar como se espera. He hecho pruebas y los datos del formulario se envían pero este se "resetea" al cabo.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 11-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo acabo de probar esta opción y me envía correctamente el formulario, pero al darle al botón BACK, ahí siguen los datos...

... en IE, porque en FF sí desaparecen.

// Saludos
Responder Con Cita
  #6  
Antiguo 11-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues toma ya... así es la verdad que sólo probé el asunto en Firefox... mal hecho, puesto que no hubiera funcionado en Internet Explorer (¿Entre cuántos más?)... gracias Román. Y en todo caso, ¿qué nos queda? ¿Recorrer los controles del formulario y borrar el contenido de las casillas de texto?

Acaso también pudiera controlarse mediante una variable "de sesión" que el mismo usuario no enviara el formulario más de dos veces en la misma sesión... guardando en la variable de sesión su IP, por ejemplo... es lo que se me ha ocurrido al principio también, pero, al final no seguí por ese camino.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #7  
Antiguo 11-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
dec, ¿qué LimpiarFormulario no podría simplificarse así?

Código:
function LimpiarFormulario(idFormulario)
{
  frm = document.getElementById(idFormulario);
  if (frm)
  {
    frm.reset();
  }
}
// Saludos
Responder Con Cita
  #8  
Antiguo 11-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Pues si lo has probado y funciona no sólo podía sino que debía hacerse así. Un formulario puede contener otros controles distintos de las casillas de texto (pienso en los "CheckBox", por ejemplo) que también precisen ser "reiniciados" convenientemente. Desde luego no se me ocurrió antes pero si funciona ya digo que me parece que debe hacerse como dices Román.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #9  
Antiguo 11-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una cosa que nunca he terminado de entender es esta:

Código PHP:
<?
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
  print 
'<pre>';
  
print_r($_POST);
  print 
'</pre>';
  
  exit();
}
?>
<form method='post' action='<?=$_SERVER['PHP_SELF']?>' name='form'>
<input type='text' name='nombre'>
<input type='submit'>
</form>
Puesto tal cual, sucede lo que se describió desde un principio. Sin embargo, si agregamos session_start() al principio, entonces los datos del formulario se borran al regresar a él. Esto he notado yo desde siempre aunque la verdad nunca me he puesto a ver qué es lo que ocurre.

Ahora, un poco al margen (o no) de esto, lograr que se borre el formulario no siempre es lo deseado. Digo, pocas cosas me fastidian tanto como llenar un formulario, darle OK, recibir un mensaje de tipo: "falta un dato", regresar, y tener que escribir todo de vuelta.

// Saludos
Responder Con Cita
  #10  
Antiguo 11-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Nada que decir.

Sólo en relación al "$_SERVER['PHP_SELF']" porque lo tengo reciente y por si puede servirle a alguien: revisen este artículo (en inglés).
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #11  
Antiguo 11-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que lo conveniente sería que abrieras un hilo distinto y comentaras al respecto, porque si no nos desviamos del tema principal.

// Saludos
Responder Con Cita
  #12  
Antiguo 11-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que lo conveniente sería que abrieras un hilo distinto y comentaras al respecto, porque si no nos desviamos del tema principal.

// Saludos
Responder Con Cita
  #13  
Antiguo 11-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
Creo que lo conveniente sería que abrieras un hilo distinto y comentaras al respecto, porque si no nos desviamos del tema principal.
¿Eso va por mí? ¿Por el enlace que he puesto arriba al artículo? No pretendía yo desviar el tema... Sé que no es lo mismo, pero, al fin y al cabo introdujiste tú el "PHP_SELF". A mí se me encendió la bombilla porque hacía poco que había andado con este tema: así que no me pareció mal dejar un enlace en donde se explica la problemática del "PHP_SELF". La verdad, no creí necesario un nuevo Hilo para esto... sólo quería anotar algo al respecto de "PHP_SELF"...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #14  
Antiguo 11-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Pues no. De hecho yo no introduje el PHP_SELF, como tampoco la palabra input, post o action, todas las cuales aparecen en mi mensaje pero sólo de manera totalmente lateral.
Responder Con Cita
  #15  
Antiguo 11-12-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Román, yo no dije que introdujeras el "PHP_SELF" en este tema por este tema. Pero en tu código apareció el "PHP_SELF" y yo me acordé entonces de lo que había leído sobre ello hace apenas un par de días. Es por esto que enlazé al artículo en cuestión, por si alguien más pudiera estar interesado. Nada más. ¿Que debí abrir un Hilo nuevo para comentarlo? Tal vez. Pero yo creo que no era necesario.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #16  
Antiguo 11-12-2006
Avatar de JavierB
JavierB JavierB is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 99
Poder: 21
JavierB Va por buen camino
Cita:
Empezado por dec
HPues toma ya... así es la verdad que sólo probé el asunto en Firefox... mal hecho, puesto que no hubiera funcionado en Internet Explorer
Lo mismo me pasó a mí, probé los dos códigos en Firefox y me puse tan contento pensando que funcionaba bien

He probado alguna cosa más, pero el puñetero Explorer sigue sin hacerme caso

Saludos,
__________________
Lo importante no es saber, sino tener el e-mail del que sabe.
Responder Con Cita
  #17  
Antiguo 11-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Siguiendo con las pruebas, veo que lo que comenté de session_start() sólo es válido en IE. Ahora,fijándome en los encabezados que se mandan cuando se usan sesiones, parece que podemos combinar ambas técnicas:

Código PHP:
<?
header
("Cache-Control: no-cache, must-revalidate");

if (
$_SERVER['REQUEST_METHOD'] == 'POST')
{
  print 
'<pre>';
  
print_r($_POST);
  print 
'</pre>';

  exit();
}
?>
<form method='post' action='<?=$_SERVER['PHP_SELF']?>' name='form'>
<input type='text' name='nombre'>
<input type='button' value='Enviar' onclick='this.form.submit(); this.form.reset();'>
</form>
Probado en IE, FF y Opera.

// Saludos
Responder Con Cita
  #18  
Antiguo 12-12-2006
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 19
elcigarra Va por buen camino
Mucho más fácil

Amigos, tal vez sea la solución más tonta pero luego de lo de kayetano probé su opción y, es cierto, cuando uno pone back las letras escritas vuelven a estar. Me perdí toda esta discusión ya que cuando me pasó eso simplemente abró la página de saludo en un _blank. De esa forma no había como poner "back". El señor solo cerraba la página de saludo y le quedaba la anterior con el formulario vacío.

Gracias a todos
Responder Con Cita
  #19  
Antiguo 12-12-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No entendí. ¿La solución fue mostrar el saludo en una ventana nueva? En tal caso, ¿como hiciste para que al cerrarla se borraran los campos del formulario? ¿Podrías explicar?

// Saludos
Responder Con Cita
  #20  
Antiguo 12-12-2006
elcigarra elcigarra is offline
Miembro
 
Registrado: may 2005
Posts: 269
Poder: 19
elcigarra Va por buen camino
En la definición del formulario:
Código:
<form id="form1" name="form1" method="post" action="env_carta.php" target="_blank">
y en el botón enviar:
Código:
<input type="button" value="Enviar" onclick="this.form.submit(); this.form.reset()" />
incluso si luego de la página del formulario vuelven atrás se vá de la misma, no va al formulario lleno.

Lo pueden ver funcionando en mi sitio:
http://www.clubdeturistas.com.uy/navidad/navidad.php
y de paso si tienen niños chicos le pueden mandar una cartita a papá noel (o Santa Claus, o otra infinidad de nombres)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Simular click en submit(imagen) de formularios web RazoR Internet 9 17-03-2011 18:31:07
Transacción interrumpida por reset Kafu Firebird e Interbase 2 20-04-2005 14:26:31
parametros en un boton vetustas Conexión con bases de datos 2 06-11-2003 14:24:48
Jpg en un botón Novás Varios 3 30-10-2003 15:40:09
Controles de un boton... Tanix Varios 6 03-06-2003 09:56:08


La franja horaria es GMT +2. Ahora son las 22:15:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi