Foros del Web » Programando para Internet » Javascript »

Problema con setInterval()

Estas en el tema de Problema con setInterval() en el foro de Javascript en Foros del Web. Hola tengo el siguiente script de un calendario y un reloj que es muy básico pero si le pongo el setInterval la página carga todo ...
  #1 (permalink)  
Antiguo 16/04/2010, 14:35
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Problema con setInterval()

Hola tengo el siguiente script de un calendario y un reloj que es muy básico pero si le pongo el setInterval la página carga todo pero no se 'actualizan' los segundos:

Código Javascript:
Ver original
  1. <script>
  2. function reloj(){
  3. var f = new Date();
  4. var a = f.getFullYear();
  5. var m = new Array ("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  6. var d = new Array ("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");;
  7. var h = f.getHours();
  8. var mi = f.getMinutes();
  9. var s = f.getSeconds();
  10. document.write ('Hoy es ' + d[f.getDay()] + ', ' + f.getDate() + ' de ' + m[f.getMonth()] + ' de ' + a + ' y son las ' + h + ':' + mi + ':' + s );
  11. }
  12. setInterval("reloj()", 500);
  13. </script>

Muchas gracias (:
  #2 (permalink)  
Antiguo 16/04/2010, 20:09
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con setInterval()

claro, porque al usar document.write limpias por completo el lienzo html, y por lo tanto borras hasta la misma función, úsalo así:

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.     function reloj(){  
  3.         var f = new Date();  
  4.         var a = f.getFullYear();
  5.         var m = new Array ("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  6.         var d = new Array ("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");;
  7.         var h = f.getHours();
  8.         var mi = f.getMinutes();  
  9.         var s = f.getSeconds();
  10.         document.getElementById("capa_reloj").innerHTML=  ('Hoy es ' + d[f.getDay()] + ', ' + f.getDate() + ' de ' + m[f.getMonth()] + ' de ' + a + ' y son las ' + h + ':' + mi + ':' + s );
  11.     }
  12.     setInterval("reloj()", 1000); //500 para que si no muestras lo microsegundos???
  13. </script>
  14. <div id="capa_reloj"></div>
  #3 (permalink)  
Antiguo 17/04/2010, 06:56
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema con setInterval()

Bueno ahora supongo que tu código era el correcto pero tampoco lo puedo saber porque tengo esto:

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  4. </head>
  5. <div id="capaNombre"></div>
  6. <div id="capaReloj"></div>
  7. </body>
  8. </html>

Código Javascript:
Ver original
  1. <script language="javascript" type="text/javascript">
  2. function reloj(){
  3. var nombre = prompt("Introduce tu nombre, por favor", "");
  4. var f = new Date();
  5. var a = f.getFullYear();
  6. var m = new Array ("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  7. var d = new Array ("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");;
  8. var h = f.getHours();
  9. var mi = f.getMinutes();
  10. var s = f.getSeconds();
  11. if (h<10){h='0'+h}
  12. if (mi<10){mi='0'+mi}
  13. if (s<10){s='0'+s}
  14. document.getElementById("capaNombre").innerHTML= ('<div style=font-size:25px;>' + 'Hola,' + '<div style=font-size:30px;>' + nombre.charAt(0).toUpperCase() + nombre.substring(1,99) + '</div>');
  15. document.getElementById("capaReloj").innerHTML= ('Hoy es ' + d[f.getDay()] + ', ' + f.getDate() + ' de ' + m[f.getMonth()] + ' de ' + a + ' y son las ' + h + ':' + mi + ':' + s + '</div>');
  16. }
  17. setInterval("reloj()", 1000);
  18. </script>

para que también introduzca un nombre, pero ahora en vez de salir una sola vez, metes el nombre y si que lo escribe y muestra la hora pero siguen apareciendo más prompts una y otra vez y no sé porque es. Gracias (:
  #4 (permalink)  
Antiguo 17/04/2010, 14:26
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con setInterval()

simple, cambias el ámbito de la variable nombre como global (fuera de la función) y preguntas si está vacia para sacar el prompt:

Código Javascript:
Ver original
  1. <script language="javascript" type="text/javascript">
  2.     var nombre='';
  3.     function reloj(){
  4.         if(nombre==''){        
  5.             nombre = prompt("Introduce tu nombre, por favor", "");
  6.         }
  7.         var f = new Date();
  8.         var a = f.getFullYear();
  9.         var m = new Array ("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  10.         var d = new Array ("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");;
  11.         var h = f.getHours();
  12.         var mi = f.getMinutes();
  13.         var s = f.getSeconds();
  14.         if (h<10){h='0'+h}
  15.         if (mi<10){mi='0'+mi}
  16.         if (s<10){s='0'+s}
  17.         document.getElementById("capaNombre").innerHTML= ('<div style=font-size:25px;>' + 'Hola,' + '<div style=font-size:30px;>' + nombre.charAt(0).toUpperCase() + nombre.substring(1,99) + '</div>');
  18.         document.getElementById("capaReloj").innerHTML= ('Hoy es ' + d[f.getDay()] + ', ' + f.getDate() + ' de ' + m[f.getMonth()] + ' de ' + a + ' y son las ' + h + ':' + mi + ':' + s + '</div>');
  19.     }
  20.     setInterval("reloj()", 1000);
  21. </script>
  #5 (permalink)  
Antiguo 17/04/2010, 15:13
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema con setInterval()

Ok el problema estaba ahí. Y por último, al introducir el nombre, me sale todo bien, pero sale 'Hola, 'y salta una línea para mostrar el nombre. ¿Cómo puedo hacer para que melo muestre todo en la misma línea? Muchas gracias :P
  #6 (permalink)  
Antiguo 17/04/2010, 15:20
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 15 años, 9 meses
Puntos: 1532
Respuesta: Problema con setInterval()

te salta una linea porque estas anidando el mensaje en un DIV que por defecto tiene flujo de bloque (CSS display:block), puedes reemplazarlo por un span con flujo de línea, ademas no estabas cerrado esa etiqueta (tags rotos), no encierras los atributos en comillas:

Código Javascript:
Ver original
  1. document.getElementById("capaNombre").innerHTML= ('<div><span style="font-size:25px;">Hola,</span><span style="font-size:30px;">' + nombre.charAt(0).toUpperCase() + nombre.substring(1,99) + '</span></div>');

incluso puedes usar el CSS text-transform:capitalize para colocar en mayúsculas la primera letra de cada palabra sin necesidad de js:

Código Javascript:
Ver original
  1. document.getElementById("capaNombre").innerHTML= ('<div><span  style="font-size:25px;">Hola,</span><span  style="font-size:30px;text-transform:capitalize;">' + nombre + '</span></div>');

Última edición por maycolalvarez; 17/04/2010 a las 15:29
  #7 (permalink)  
Antiguo 17/04/2010, 15:58
Avatar de _cronos  
Fecha de Ingreso: abril-2010
Mensajes: 135
Antigüedad: 14 años
Puntos: 1
Respuesta: Problema con setInterval()

Perfecto, el código correcto es:

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3.  
  4. <title>eva</title>
  5.  
  6. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  7. </head>
  8. <div id="capaNombre"></div>
  9. <div id="capaReloj"></div>
  10. </body>
  11. </html>
Código javascript:
Ver original
  1. <script language="javascript" type="text/javascript">
  2. var nombre = ''
  3. function reloj(){
  4. var f = new Date();
  5. var a = f.getFullYear();
  6. var m = new Array ("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
  7. var d = new Array ("Domingo","Lunes","Martes","Miércoles","Jueves","Viernes","Sábado");
  8. var h = f.getHours();
  9. var mi = f.getMinutes();
  10. var s = f.getSeconds();
  11. if (nombre == ''){nombre = prompt("Introduce tu nombre, por favor", "")};
  12. if (h<10){h='0'+h}
  13. if (mi<10){mi='0'+mi}
  14. if (s<10){s='0'+s}
  15. document.getElementById("capaNombre").innerHTML= ('<div><span style="font-size:25px; display: inline;">' + 'Hola, ' + '</span><span style="font-size:30px;">' + nombre.charAt(0).toUpperCase() + nombre.substring(1) + '</span></div>');
  16. document.getElementById("capaReloj").innerHTML= ('<div><span style="font-size: 20px;">Hoy es ' + d[f.getDay()] + ', ' + f.getDate() + ' de ' + m[f.getMonth()] + ' de ' + a + ' y son las ' + h + ':' + mi + ':' + s + '</span></div>');
  17. }
  18. setInterval("reloj()", 1000);
  19. </script>

Muchas gracias maycolalvarez (:

Etiquetas: setinterval
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 03:14.