Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Cómo evitar reenviar un formulario?

Estas en el tema de Cómo evitar reenviar un formulario? en el foro de Javascript en Foros del Web. Estoy aprendiendo JavaScript y ahora hago 1 prueba d cómo evitar reenviar 1 formulario. Tengo 2 funciones. Una valida el formu, y lo hace bien. ...
  #1 (permalink)  
Antiguo 10/02/2013, 15:04
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta Cómo evitar reenviar un formulario?

Estoy aprendiendo JavaScript y ahora hago 1 prueba d cómo evitar reenviar 1 formulario. Tengo 2 funciones. Una valida el formu, y lo hace bien. La otra evita reenviarlo pero no funciona. (Sí funciona si la empleo sin emplear la otra función). Cuando acaba la primera, que es la de validación, llamo a la otra, que debería evitar reenviar el formulario. He hecho pruebas y sin duda que el intérprete lee la función que evita que el formulario se reenvíe, pero no le hace caso al RETURN FALSE que se supone debería cancelar el reenvío, y lo envía de todas formas.

He aquí la función en cuestión:

<script type="text/javascript">
var envios = 0;
function evitarReenvio()
{
if (envios == 0)
{
envios++;
alert("En este momento envías el formulario");
return true;
}
else
{
alert("Tu formulario ya ha sido enviado\nGracias");
return false;
}
}
</script>
  #2 (permalink)  
Antiguo 10/02/2013, 16:33
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: Cómo evitar reenviar un formulario?

Y que tal si ponés el html completo.
cual es la otra función?
como llamás las funciones?
que querés evitar, el envío o el reenvío?
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 11/02/2013, 00:55
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: Cómo evitar reenviar un formulario?

Cita:
Iniciado por emprear Ver Mensaje
Y que tal si ponés el html completo.
cual es la otra función?
como llamás las funciones?
que querés evitar, el envío o el reenvío?
Saludos
He aquí el script completo:
<script language="javascript" type="text/javascript">

// Aquí la función que valida el formulario (sólo se asegura que el usuario no mande formulario vacío).
function validar()
{
nombre = document.forms[0].elements[0].value;
edad = document.forms[0].elements[1].value;
sexoH = document.forms[0].elements[2].checked;
sexoM = document.forms[0].elements[3].checked;

if (nombre == "")
{
document.getElementById("error1").style.visibility = "visible";
return false;
}
else document.getElementById("error1").style.visibility = "hidden";
if (edad == "")
{
document.getElementById("error2").style.visibility = "visible";
return false;
}
else document.getElementById("error2").style.visibility = "hidden";
if (sexoH == false && sexoM == false)
{
document.getElementById("error3").style.visibility = "visible";
return false;
}
else
{
document.getElementById("error3").style.visibility = "hidden";
}
evitarReenvio();
}
// Aquí la función de evitar reenvío.
var envios = 0;
function evitarReenvio()
{
if (envios == 0)
{
envios++;
alert("En este momento envías el formulario");
return true;
}
else
{
alert("Tu formulario ya ha sido enviado\nGracias");
return false; // <---- Y este RETURN FALSE no funciona, no cancela el reenvío!
}
}
</script>

Y aquí el HTML:

<form action="mailto:[email protected]" method="post" enctype="text/plain" onsubmit="return validar()">
<b>Nombre</b><br />
<input type="text" />
<b id="error1">El campo no puede ir vacío</b><br /><br />

<b>Edad</b><br />
<input type="text" />
<b id="error2">El campo no puede ir vacío</b><br /><br />

<b>Sexo</b><br />
<input type="radio" name="bola" />
<input type="radio" name="bola" />
<b id="error3">Debes elejir una opción</b>
<br />
<br />
<br />
<input type="reset" />
<input type="submit" />
</form>
  #4 (permalink)  
Antiguo 11/02/2013, 00:58
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: Cómo evitar reenviar un formulario?

Perdón maestro EMPREAR, se me olvido poner el CSS, que resulta indispensable:

<style type="text/css">
#error1, #error2, #error3 {visibility:hidden; color:red;}
</style>
  #5 (permalink)  
Antiguo 11/02/2013, 06:44
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: Cómo evitar reenviar un formulario?

Es algo complicado lo que hiciste, de todas maneras si es para practicar, viene bien.

Te explico, cuando llamás una función con return, se espera una respuesta de la misma, de hecho vos hacés, onsubmit="return validar()".
Como en los errores devuelve false, se cancela la ejecución. Cuando llamás evitarReenvio(), es lo mismo, por lo tanto debés llamarla con
return evitarReenvio(); desde validar(), y ahi si, si le da 2 veces al boton enviar(habiendo completado todos los campos por supuesto), va a recibir el último mensaje ya que envios > 0 y el último return false; va a prevenir que se ejecute el mailto nuevamente

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #6 (permalink)  
Antiguo 11/02/2013, 11:45
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: Cómo evitar reenviar un formulario?

Cita:
Iniciado por emprear Ver Mensaje
Es algo complicado lo que hiciste, de todas maneras si es para practicar, viene bien.

Te explico, cuando llamás una función con return, se espera una respuesta de la misma, de hecho vos hacés, onsubmit="return validar()".
Como en los errores devuelve false, se cancela la ejecución. Cuando llamás evitarReenvio(), es lo mismo, por lo tanto debés llamarla con
return evitarReenvio(); desde validar(), y ahi si, si le da 2 veces al boton enviar(habiendo completado todos los campos por supuesto), va a recibir el último mensaje ya que envios > 0 y el último return false; va a prevenir que se ejecute el mailto nuevamente

Saludos
Ahora tengo prisa, voy a la Universidad a recoger unos papeles de mi titulación. Pero regreso y voy a tratar de hacer lo que me dices, maestro EMPREAR. Me salga bien o no la prueba, regreso y comento el resultado.
  #7 (permalink)  
Antiguo 11/02/2013, 11:57
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: Cómo evitar reenviar un formulario?

Cita:
Iniciado por berkeleyPunk Ver Mensaje
Ahora tengo prisa, voy a la Universidad a recoger unos papeles de mi titulación. Pero regreso y voy a tratar de hacer lo que me dices, maestro EMPREAR. Me salga bien o no la prueba, regreso y comento el resultado.
ok, pero ya deja eso de MAESTRO, a ver si me lo termino creyendo
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #8 (permalink)  
Antiguo 11/02/2013, 13:16
Avatar de berkeleyPunk  
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Respuesta: Cómo evitar reenviar un formulario?

Cita:
Iniciado por emprear Ver Mensaje
ok, pero ya deja eso de MAESTRO, a ver si me lo termino creyendo
Eso! Le puse RETURN a la llamada de la función evitarReenvio() y por fin funcionó!

Qué cosa esta de la programación! Que con sólo un caracter o una palabra, todo falla!

Gracias EMPREAR. Como ves, aún soy un principiante en JavaScript. En el futuro, cuando me salga una nueva duda (que seguro saldrá), regreso. Así que no salgas del país.

Así, supongamos que nadie tenga acceso a nuestras imágenes, excepto los siguientes sitios:
instalaciones electricas
mantenimiento industrial
naves industriales
obra civil
proyecto llave en mano
sistemas contra incendios
subestaciones electricas
constructoras
hvac

Última edición por berkeleyPunk; 24/09/2014 a las 19:36

Etiquetas: formulario, funcion, reenviar
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 00:32.