Bienvenido(a), Visitante. Favor de ingresar o registrarse.
Diciembre 05, 2008, 10:35:01
Inicio Ayuda Buscar Ingresar Registrarse
Noticias: Foro de Java, C++ y más.

Nuevo foro de Control de versiones.

+  Foros Java y C/Linux
|-+  Programación Web
| |-+  Javascript
| | |-+  Problema con setTimeout
« anterior próximo »
Páginas: [1] Enviar tema Imprimir
Autor Tema: Problema con setTimeout  (Leído 555 veces)
moon82
Newbie
*
Mensajes: 16


Ver Perfil


« en: Diciembre 12, 2007, 01:54:43 »

Hola!
no consigo encontrar dónde tengo el error o qué estoy haciendo mal, he mirado miles de cosas por internet y ya no sé...
Al ejecutar este código para hacer unas pruebecillas me sale un error en IE de "Se esperaba un objeto", y no sé por qué.
El caso es que este código lo que hace es recoger los datos de hora inicial y hora final que llegan de un formulario, después al cargarse la página calculo el tiempo que queda hasta la hora inicial y cuando llega a esa hora pasa a la función envia(). El problema viene cuando llega al setTimeout que está dentro del if, ahí es cuando al ejecutarse el retraso de 10000 milisegundos da el error en IE y ya no se ejecuta más.
Código:
<%@page contentType="text/html;charset=ISO-8859-1" import="java.util.Calendar,java.text.SimpleDateFormat,java.util.TimeZone,java.io.*,java.util.Date"%>
<html>
<head>
<title>Insert title here</title>
<%
String hora_ini_aux = request.getParameter("fecha_inicio");
String hora_fin_aux = request.getParameter("fecha_fin");
String[] vect_hora_ini = hora_ini_aux.split(":");
int horas_ini = Integer.parseInt(vect_hora_ini[0].trim());
int minutos_ini = Integer.parseInt(vect_hora_ini[1].trim());
int segundos_ini = Integer.parseInt(vect_hora_ini[2].trim());
Calendar calendar_ini = Calendar.getInstance();
calendar_ini.set(Calendar.HOUR_OF_DAY, horas_ini);
calendar_ini.set(Calendar.MINUTE, minutos_ini);
calendar_ini.set(Calendar.SECOND, segundos_ini);
Date time_ini = calendar_ini.getTime();

String[] vect_hora_fin = hora_fin_aux.split(":");
int horas_fin = Integer.parseInt(vect_hora_fin[0].trim());
int minutos_fin = Integer.parseInt(vect_hora_fin[1].trim());
int segundos_fin = Integer.parseInt(vect_hora_fin[2].trim());
Calendar calendar_fin = Calendar.getInstance();
calendar_fin.set(Calendar.HOUR_OF_DAY, horas_fin);
calendar_fin.set(Calendar.MINUTE,minutos_fin);
calendar_fin.set(Calendar.SECOND, segundos_fin);
Date time_fin = calendar_fin.getTime();
Calendar fecha_actual= Calendar.getInstance();
Date ahora=fecha_actual.getTime();
long dif_milis=time_ini.getTime() - ahora.getTime();
%>

<script language="javascript" type="text/javascript">
var ident;
function enviar_form(){

var fecha_ini=new Date();
fecha_ini="<%=time_ini%>";
var fecha_fin=new Date();
fecha_fin="<%=time_fin%>";
var miliseg=<%=dif_milis%>;

if (miliseg>0)
{
ident=setTimeout("envia()",miliseg);
}
else
{
miliseg=0;
ident=setTimeout("envia()",miliseg);
}

}
function envia(){
var mydate=new Date();
var year=mydate.getYear();
var day=mydate.getDay();
var month=mydate.getMonth()+1;
if (month<10)
month="0"+month;
var daym=mydate.getDate();
if (daym<10)
daym="0"+daym;
var hora=mydate.getHours();
if(hora<10)
hora="0"+hora;
var minuto=mydate.getMinutes();
if(minuto<10)
minuto="0"+minuto;
var segundo=mydate.getSeconds();
if(segundo<10)
segundo="0"+segundo;
document.write("<b>"+daym+"/"+month+"/"+year+" "+hora+":"+minuto+":"+segundo+" </b>=> hola");
document.write("<br>");
var nueva=new Date();
nueva2=nueva.getTime();
var nueva3=new Date();
nueva3=<%=calendar_fin.getTimeInMillis()%>;
var t_fin=nueva3 - nueva2;
if (t_fin>0)
{
ident = setTimeout("envia()",10000);

}
else
{
parar();
}

}

function parar(){
alert("se acabó");
clearTimeout(ident);
}

</script>
</head>
<body onLoad="javascript:enviar_form()">
</body>
</html>

A ver si alguien me echa una mano...que yo ya no veo nada  Avergonzado

Gracias!!!!
En línea
moon82
Newbie
*
Mensajes: 16


Ver Perfil
« Respuesta #1 en: Diciembre 13, 2007, 10:13:11 »

Hola de nuevo!!

He descubierto que el problema anterior desaparece si elimino todos los document.write que me escribían cosas en el navegador...
Entonces, si necesito escribir en el navegador cada vez que el setTimeout llama a la función, ¿cómo lo puedo hacer?¿hay alguna otra forma de escribir??

Gracias!! Alguna idea....  Girar ojos
En línea
venkman
Jr. Member
**
Mensajes: 68


Ver Perfil
« Respuesta #2 en: Diciembre 17, 2007, 04:57:18 »

¿Qué es lo que pretendes hacer con los document.write? ¿Dónde pretendes escribir?



Si no funciona es porque al hacer document.write así, estás abriendo un nuevo document y en ese, no existe ya el envia().
En línea
moon82
Newbie
*
Mensajes: 16


Ver Perfil
« Respuesta #3 en: Diciembre 18, 2007, 01:22:15 »

Si, el problema estaba ahí, en cuanto eliminé todos los document.write de las funciones, ya me iba bien  Girar ojos
Gracias!
En línea
Páginas: [1] Enviar tema Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by MySQL Powered by PHP Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC XHTML 1.0 válido! CSS válido!