Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Temporizador de 30 minutos para enviar datos de un formulario

Estas en el tema de Temporizador de 30 minutos para enviar datos de un formulario en el foro de Javascript en Foros del Web. Hola amigos espero que me puedan ayudar, tengo un examen que hize con un formulario y valido los datos con php y los datos los ...
  #1 (permalink)  
Antiguo 28/07/2014, 15:12
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Pregunta Temporizador de 30 minutos para enviar datos de un formulario

Hola amigos espero que me puedan ayudar, tengo un examen que hize con un formulario y valido los datos con php y los datos los coloco en mi base de datos, todo ahí bien.. pero la idea de dicho examen es que sea con tiempo, específicamente de 30 minutos y al cumplirse el tiempo que haga el submit de dicho formulario, el temporizador debe ser visto por el usuario, así que debe ir en el formato de tiempo de 30:00 hasta llegar a 00:00, los que tengo que encontré por ahí es lo siguiente:

Tengo un div:
Código HTML:
Ver original
  1. <div id='i'></div>

Y el javascript que tengo es:
Código Javascript:
Ver original
  1. c = 60;
  2. int = setInterval(function(){
  3.     c--;
  4.     document.getElementById('i').innerHTML = c;
  5.     if(c == 0){
  6.         alert('Alerta');
  7.                 clearInterval(int);
  8.     }
  9. },1000);

pero no entiendo bien como acomodar esto para que el formulario haga submit despues de 30 minutos, muchas gracias.
  #2 (permalink)  
Antiguo 28/07/2014, 19:20
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Hola:

Tanto el parámetro de setInterval como setTimeout es un valor númérico en milisegundos, o sea si ese segundo parámetro es 1000 se trata de 1000 milisegundos, o sea un segundo... si lo multiplicas por 60 ya tienes un minuto...

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #3 (permalink)  
Antiguo 29/07/2014, 14:07
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Cita:
Iniciado por caricatos Ver Mensaje
Hola:

Tanto el parámetro de setInterval como setTimeout es un valor númérico en milisegundos, o sea si ese segundo parámetro es 1000 se trata de 1000 milisegundos, o sea un segundo... si lo multiplicas por 60 ya tienes un minuto...

Saludos
Si mucas gracias, lo que hice fue esto:

Código HTML:
Ver original
  1. <!doctype html>
  2. <meta charset="iso-8859-2">
  3. <title>Untitled Document</title>
  4. </head>
  5.  
  6.     <div id="Reloj">
  7.         <table width="165" align="center">
  8.             <tr>
  9.                 <td colspan="3" align="center"><p>Tiempo restante</p></td>
  10.             </tr>
  11.             <tr>
  12.                 <td id="j" width="87" align="right">29</td>
  13.                 <td id="k" width="6">:</td>
  14.                 <td id="i" width="91">59</td>
  15.             </tr>
  16.         </table>
  17.     </div>
  18. </body>
  19. </html>

Este el javascript
Código Javascript:
Ver original
  1. seg = 60;
  2. int = setInterval(function()
  3. {
  4.     seg--;
  5.     document.getElementById('i').innerHTML = seg;
  6.    
  7.     if(seg < 10)
  8.     {
  9.         document.getElementById('i').innerHTML = '0' + seg;
  10.         if(seg == 0)
  11.         {
  12.             seg = 60;
  13.         }
  14.     }
  15. },1000);
  16.  
  17. minutos = 29;
  18. int = setInterval(function()
  19. {
  20.     minutos--;
  21.     document.getElementById('j').innerHTML = minutos;
  22.     if(minutos < 10)
  23.     {
  24.         document.getElementById('i').innerHTML = '0' + minutos;
  25.         if(minutos == 0)
  26.         {
  27.             alert('Alerta: El tiempo se finalizó');
  28.             clearInterval(int);
  29.         }
  30.     }
  31.  
  32. },60000);

Pero tengo dos problemas el primero que el temporizador al iniciar no es automático sino que inicia mas o menos despues de dos segundos y el otro es que los minutos me cambian cuando el segundo está en cero y no en 59, por más que cambio los valores de las variables o pruebo otras cosas no me funciona correctamente
  #4 (permalink)  
Antiguo 29/07/2014, 14:43
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Podrías hacerlo así:

Código HTML:
Ver original
  1. <label id = "tiempo">30:00</label>

Código Javascript:
Ver original
  1. var salida = document.getElementById("tiempo"),
  2.     minutos = 30,
  3.     segundos = 0,
  4.     intervalo = setInterval(function(){
  5.         if (--segundos < 0){
  6.             segundos = 59;
  7.             minutos--;
  8.         }
  9.      
  10.         if (!minutos && !segundos)
  11.             clearInterval(intervalo);
  12.  
  13.         salida.innerHTML = minutos + ":" + (segundos < 10 ? "0" + segundos : segundos);
  14.     }, 1000);

Lo que hace este pequeño script es lo siguiente. Primero, tomo al elemento en el cual se visualizará la cuenta regresiva, además, inicializo a las variables minutos y [inline]segundos/inline] con los valores que inicialmente (valga la redundancia) deberán de tener y por último, una cuarta variable de nombre intervalo, a la cual le asignaré el intervalo creado con el método setInterval. En la función que se ejecutará cada segundo en el intervalo, resto 1 a segundos y si su valor es menor a 0, le asigno el 59 como nuevo valor, además, resto 1 a minutos, de este modo, para la siguiente ejecución, segundos será igual a 59 - 1, por lo que al no ser menor que 0, quedará con ese valor y no se restará otro minuto. Por otro lado, cuando los valores de minutos y segundos sean iguales a 0 (recordando que el 0 equivale al valor booleano false), se terminará el intervalo de tiempo. Finalmente, muestro en el elemento de salida a los valores actualizados de las variables minutos y segundos, dándole a esta última el formato respectivo en caso sea menor que 10.



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
  #5 (permalink)  
Antiguo 29/07/2014, 15:48
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Cita:
Iniciado por Alexis88 Ver Mensaje
Podrías hacerlo así:

Código HTML:
Ver original
  1. <label id = "tiempo">30:00</label>

Código Javascript:
Ver original
  1. var salida = document.getElementById("tiempo"),
  2.     minutos = 30,
  3.     segundos = 0,
  4.     intervalo = setInterval(function(){
  5.         if (--segundos < 0){
  6.             segundos = 59;
  7.             minutos--;
  8.         }
  9.      
  10.         if (!minutos && !segundos)
  11.             clearInterval(intervalo);
  12.  
  13.         salida.innerHTML = minutos + ":" + (segundos < 10 ? "0" + segundos : segundos);
  14.     }, 1000);

Lo que hace este pequeño script es lo siguiente. Primero, tomo al elemento en el cual se visualizará la cuenta regresiva, además, inicializo a las variables minutos y [inline]segundos/inline] con los valores que inicialmente (valga la redundancia) deberán de tener y por último, una cuarta variable de nombre intervalo, a la cual le asignaré el intervalo creado con el método setInterval. En la función que se ejecutará cada segundo en el intervalo, resto 1 a segundos y si su valor es menor a 0, le asigno el 59 como nuevo valor, además, resto 1 a minutos, de este modo, para la siguiente ejecución, segundos será igual a 59 - 1, por lo que al no ser menor que 0, quedará con ese valor y no se restará otro minuto. Por otro lado, cuando los valores de minutos y segundos sean iguales a 0 (recordando que el 0 equivale al valor booleano false), se terminará el intervalo de tiempo. Finalmente, muestro en el elemento de salida a los valores actualizados de las variables minutos y segundos, dándole a esta última el formato respectivo en caso sea menor que 10.



Saludos
Muchas gracias el script se ve simple pero no me funciona el temporizador no corre, creo que tengo que poner un onload en el body para llamar la función??? pero no se, muchas gracias.
  #6 (permalink)  
Antiguo 29/07/2014, 15:51
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

¿Será quizá que colocaste el script en la cabecera del documento? Colócalo justo antes de la etiqueta </body> para que surta efecto.

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
  #7 (permalink)  
Antiguo 29/07/2014, 16:04
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Pregunta Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Cita:
Iniciado por Alexis88 Ver Mensaje
¿Será quizá que colocaste el script en la cabecera del documento? Colócalo justo antes de la etiqueta </body> para que surta efecto.

Saludos
Así es ya lo coloque después de</body> y ahí funcionó, estoy haciendo esto para que cuando el tiempo se termine me envié los datos de un formulario, agregue la siguiente línea:
Código Javascript:
Ver original
  1. document.getElementById("test").submit(); //test es el nombre de mi form

y todo quedo así:
Código Javascript:
Ver original
  1. var salida = document.getElementById("tiempo"),
  2.     minutos = 30,
  3.     segundos = 0,
  4.     intervalo = setInterval(function(){
  5.         if (--segundos < 0){
  6.             segundos = 59;
  7.             minutos--;
  8.         }
  9.      
  10.         if (!minutos && !segundos)
  11.             clearInterval(intervalo);
  12.  
  13.         salida.innerHTML = minutos + ":" + (segundos < 10 ? "0" + segundos : segundos);
  14.         document.getElementById("test").submit();
  15.     }, 1000);

Pero no funcinó

En donde es que debo de colocar dicha línea para que el formulario haga submit, muchas gracias y disculpa que te moleste tanto.
  #8 (permalink)  
Antiguo 29/07/2014, 16:09
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Esa línea debes de colocarla en el mismo bloque de instrucciones que se ejecuta cuando los minutos y segundos llegan a cero, es decir:

Código Javascript:
Ver original
  1. if (!minutos && !segundos){
  2.     clearInterval(intervalo);
  3.     document.getElementById("test").submit();
  4. }

Por cierto, te dije que coloques el código JS antes de la etiqueta </body>, no después. Aunque funcione, también es bueno tener un código ordenado, evitando colocar contenido en donde no va.

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
  #9 (permalink)  
Antiguo 29/07/2014, 16:56
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Pregunta Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Cita:
Iniciado por Alexis88 Ver Mensaje
Esa línea debes de colocarla en el mismo bloque de instrucciones que se ejecuta cuando los minutos y segundos llegan a cero, es decir:

Código Javascript:
Ver original
  1. if (!minutos && !segundos){
  2.     clearInterval(intervalo);
  3.     document.getElementById("test").submit();
  4. }

Por cierto, te dije que coloques el código JS antes de la etiqueta </body>, no después. Aunque funcione, también es bueno tener un código ordenado, evitando colocar contenido en donde no va.

Saludos
Gracias ya coloque el script en donde vá, pero hice la prueba colocando la línea del submit pero el temporizador no llega a cero sino que se quedo en 00:01
  #10 (permalink)  
Antiguo 29/07/2014, 17:06
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Eso sucede porque cuando la cuenta llega a cero, se corta el intervalo y se ejecuta el método submit antes de mostrar el tiempo actualizado. Lo único que tendrías que hacer es colocar la línea en donde muestras el tiempo antes de la condición en donde cortas el intervalo.

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
  #11 (permalink)  
Antiguo 29/07/2014, 21:32
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Cita:
Iniciado por Alexis88 Ver Mensaje
Eso sucede porque cuando la cuenta llega a cero, se corta el intervalo y se ejecuta el método submit antes de mostrar el tiempo actualizado. Lo único que tendrías que hacer es colocar la línea en donde muestras el tiempo antes de la condición en donde cortas el intervalo.

Saludos
Gracias por todo tu apoyo pero no se en que parte colocar el submit, ayúdame por favor, muchas gracias.
  #12 (permalink)  
Antiguo 29/07/2014, 23:01
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años
Puntos: 977
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

¿Qué no habías solucionado eso y solo te faltaba el tema de que se ejecutaba el envío faltando 1 segundo?

Así es como debería de quedar el script:

Código Javascript:
Ver original
  1. var salida = document.getElementById("tiempo"),
  2.     minutos = 30,
  3.     segundos = 0,
  4.     intervalo = setInterval(function(){
  5.         if (--segundos < 0){
  6.             segundos = 59;
  7.             minutos--;
  8.         }
  9.  
  10.         salida.innerHTML = minutos + ":" + (segundos < 10 ? "0" + segundos : segundos);
  11.      
  12.         if (!minutos && !segundos){
  13.             clearInterval(intervalo);
  14.             document.getElementById("test").submit();
  15.         }
  16.     }, 1000);

Si no se realiza el envío, probablemente sea porque no estás tomando correctamente al formulario. Recuerda que el id del mismo debe de tener como valor a la palabra 'test'; si el atributo name es el que posee a dicho valor, entonces deberás tomarlo con el método getElementsByName y especificando al final el número de elemento, es decir:

Código Javascript:
Ver original
  1. document.getElementsByName("test")[0].submit();

Ojo, lo anterior es válido solo si el valor del atributo name es igual a 'test', pero si el que posee a dicho valor es el atributo id, entonces así como está debería de funcionar.

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
  #13 (permalink)  
Antiguo 31/07/2014, 08:24
Avatar de MLDGATO  
Fecha de Ingreso: marzo-2011
Ubicación: Guatemala
Mensajes: 113
Antigüedad: 13 años, 8 meses
Puntos: 2
Respuesta: Temporizador de 30 minutos para enviar datos de un formulario

Muchas gracias por tu ayuda ha sido muy valiosa para mi, que Dios te bendiga amigo Alexis88.

Etiquetas: formularios, formulariosenphp
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 13:32.