Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Submit con delay

Estas en el tema de Submit con delay en el foro de Javascript en Foros del Web. Hola a todo@s, me gustaria crear un form, pero que al hacer click en submit, tardara unos segundos en enviar. Es decir yo tengo este ...
  #1 (permalink)  
Antiguo 26/03/2015, 03:22
Avatar de djboro88  
Fecha de Ingreso: junio-2009
Ubicación: Valencia
Mensajes: 180
Antigüedad: 15 años, 5 meses
Puntos: 2
Pregunta Submit con delay

Hola a todo@s, me gustaria crear un form, pero que al hacer click en submit, tardara unos segundos en enviar.

Es decir yo tengo este form:
Código HTML:
<form action="./" method="POST" id="form1">
<input type="text" name="nombre">
<input type="text" name="apellidos">
<button type="submit" class="envio" name="enviado" onclick="javascript:enviar();">Enviar</a>
</form> 
Y la funcion "enviar()" en JS es esta:
Código HTML:
<script>
function enviar() {	
        setTimeout(function(){ 
               <?php //Enviar a BD
               $nombre = $_POST['nombre'];
               $apellidos = $_POST['apellidos'];
               mysqli_query($con,"INSERT INTO usuarios ('nom','ape') VALUES('$nom', '$ape')");
               ?>		

	}, 5000);
    } 
¿Alguna razon por la que no funciona? Gracias !!

PD: Lo he intentado con:
Código HTML:
<a href="#" onclick="javascript:enviar();">BOTON</a> 
Y añadiendo al JS:
Código HTML:
document.getElementById('form1').submit()
Pero no envia los campos por POST.
  #2 (permalink)  
Antiguo 26/03/2015, 09:09
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Submit con delay

la parte php nunca se ejecutará. has de enviar los datos a un archivo php, bien sea de la manera convencional o con ajax. en tu caso con ajax.

para que el temporizador surta efecto, cambia el tipo de botón submit por button
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 26/03/2015, 09:49
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Submit con delay

No puedes ejecutar el guardado de datos de esa manera. Necesitas enviarlos para poder obtenerlos de $_POST y luego ya podrás procesarlos.

Lo que tendrías que hacer es simple. Primero, en lugar del <button>, coloca un <input> de tipo submit, que es el botón natural de un formulario para enviar su información, luego, cuando se produzca el evento submit, que es el que ocurre cuando envías los datos del formulario a procesarse, lo cancelas con el método preventDefault, aplicas el método temporizador setTimeout para enviar la información luego de un determinado tiempo y, finalmente, utiliza el método submit para hacer el envío de la información.

Esto debe de ir en la cabecera del formulario:
Código HTML:
Ver original
  1. <form action="./" method="POST" id="form1" onsubmit="enviar(event, this)">

Y este es el script para aplicar el efecto de retraso:
Código Javascript:
Ver original
  1. function enviar(evento, formulario){
  2.     evento.preventDefault(); //Cancelo el envío
  3.     setTimeout(function(){ //Aplico el temporizador
  4.         formulario.submit(); //Envío los datos
  5.     }, 5000);
  6. }

Y como veo que piensas procesar los datos en el mismo archivo, necesitas una condición que verifique que has recibido datos medianto el método POST.

Código PHP:
Ver original
  1. if ($_POST){
  2.     //Ejecutas el código para guardar la información
  3. }

Solo como un consejo, evita mezclar código de distintos lenguajes de esa manera. Es preferible y más ordenado tener el código PHP en un archivo con extensión .php, el código JavaScript en un archivo con extensión .js y así con los demás.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Etiquetas: post, sleep, 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 05:22.