Foros del Web » Programando para Internet » Javascript »

Variable en InnerHTML

Estas en el tema de Variable en InnerHTML en el foro de Javascript en Foros del Web. ¡Hola! Estaba intentando crear un generador de imagenes al azar con 5 divs flotantes. Encontré por ahí un código que genera el número,y funciona muy ...
  #1 (permalink)  
Antiguo 22/11/2011, 10:21
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Variable en InnerHTML

¡Hola!
Estaba intentando crear un generador de imagenes al azar con 5 divs flotantes.
Encontré por ahí un código que genera el número,y funciona muy bien.El problema es que al asignar en el bucle el nombre en una variable,me da este problema:
"document.getElementById(cuadrado) is null"
¿Alguien sabe que es lo que le pasa al código?
Aqui está el código simplificado a 6 imágenes:


Código Javascript:
Ver original
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Menu contextual</title>
  5. <link rel="stylesheet" href="g2.css" type="text/css" />
  6. <script type="text/javascript">
  7. for(var i = 1; i <= 4; i++){
  8.     var iSuperior = 4;
  9.     var dResult = Math.random();
  10.     dResult = Math.floor(dResult * (iSuperior + 1));
  11.     //var cuadrado = String("d" + dResult);
  12.     var cuadrado="'d"+ dResult +"'";   
  13. switch(dResult){
  14.     case 0:
  15.     var imprimir="<img width='200' height='150' src='2cia6ic.gif'/>"
  16.         document.getElementById(cuadrado).innerHTML= imprimir;
  17.         break;
  18.         case 1:
  19.             var imprimir="<img width='200' height='150' src='966cfcff1a83a6ce3eb7abac493c87e9.gif'/>"
  20.         document.getElementById(cuadrado).innerHTML= imprimir;//document.getElementById(cuadrado).src="966cfcff1a83a6ce3eb7abac493c87e9.gif";  
  21.         break;
  22.         case 2:
  23.         var imprimir="<img width='200' height='150' src='12663d2a1c1fba67cf007be.gif'/>"
  24.         document.getElementById(cuadrado).innerHTML= imprimir;
  25. //document.getElementById(cuadrado).src="12663d2a1c1fba67cf007be.gif";     
  26.         break;
  27.         case 3:
  28.                 var imprimir="<img width='200' height='150' src='97ad6f9782f8090599ee0a2.gif'/>"
  29.         document.getElementById(cuadrado).innerHTML= imprimir;
  30.         //document.getElementById(cuadrado).src="97ad6f9782f8090599ee0a2.gif";     
  31.         break;
  32.         case 4:
  33.         var imprimir="<img width='200' height='150' crc='bfff33331089fc046d0efa1.gif'/>"
  34.         document.getElementById(cuadrado).innerHTML= imprimir;
  35.         //document.getElementById(cuadrado).src="bfff33331089fc046d0efa1.gif";
  36.         break;
  37.         case 6:
  38.         var imprimir="<img width='200' height='150' src='d777c8de014bfb21d3647ff.gif'/>"
  39.         document.getElementById(cuadrado).innerHTML= imprimir;
  40.         //document.getElementById(cuadrado).src="d777c8de014bfb21d3647ff.gif";
  41.         break;
  42.         default:
  43.         document.getElementById(cuadrado).src="966cfcff1a83a6ce3eb7abac493c87e9.gif";
  44.         break; 
  45.     }
  46. </script>
  47. </head>
  48. <body>
  49. <div id="d0" style="width:200px; float:left;"><img id="dd0" value="1" width="200" height="150"/></div>
  50. <div id="d1"  style="width:200px; float:left;"><img id="dd1" value="1" width="200" height="150"/></div>
  51. <div id="d2"  style="width:200px; float:left;"><img id="dd2" value="1" width="200" height="150"/></div>
  52. <div id="d3"  style="width:200px; float:left;"><img id="dd3" value="1" width="200" height="150"/></div>
  53. <div id="d4"  style="width:200px; float:left;"><img id="dd4" value="1" width="200" height="150"/></div>
  54.  
  55.  
  56. </body>
  57. </html>
Tambien probé con .src en la etiqueta imagen,pero me daba el mismo error.
¿Que es lo incorrecto en el InnerHTML?¿Alguna sugerencia?
¡Gracias de antemano por la respuesta!
__________________
Poco a poco,avanzando en Javascript....
  #2 (permalink)  
Antiguo 22/11/2011, 10:27
Avatar de Franz1628  
Fecha de Ingreso: marzo-2007
Ubicación: Lima - Perú
Mensajes: 145
Antigüedad: 17 años, 1 mes
Puntos: 26
Respuesta: Variable en InnerHTML

Parece que en la linea 12 falta una "d"
var cuadrado="'dd"+ dResult +"'";
__________________
En mi Blog puedes ver articulos javascript y más...
@Franz1628
  #3 (permalink)  
Antiguo 22/11/2011, 14:15
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Variable en InnerHTML

Gracias por responder tan rápido.
En cuanto esté en mi PC,comprobaré si es eso¡Gracias!
__________________
Poco a poco,avanzando en Javascript....
  #4 (permalink)  
Antiguo 22/11/2011, 14:19
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Variable en InnerHTML

Varias cosas:
A) Si no me fallan los cálculos, dResult va a tomar los valores [0, 4], así que sobra el case 5, 6 y default
B) Ten en cuenta que estás poniendo
Cita:
var cuadrado="'d"+ dResult +"'";
Esas comillas simples sobran, las dobles ya te dan el string.
C) Un switch, a mi entender, es muy Java. En JS es mejor usar objetos, o si los índices son números, mejor arrays:
Código Javascript:
Ver original
  1. var codes = ['foo', 'bar', 'baz', 'candy'];
  2. console.log(codes[dResult]);
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #5 (permalink)  
Antiguo 22/11/2011, 15:02
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Variable en InnerHTML

¡Gracias por responder!Es que soy nuevo en javascript...
Puse las comillas por si no consideraba eso un string...visual Basic pondía poner pegas en eso...
¿me puedes explicar lo que hace console.log?Es que no lo entiendo mucho...además,lo he vuelto a dejar así y sigue dando error...
__________________
Poco a poco,avanzando en Javascript....
  #6 (permalink)  
Antiguo 22/11/2011, 16:16
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Variable en InnerHTML

console es la consola de errores. Por ejemplo en Chrome, usa F12 o Ctrl+J y te saldrá, entonces ve a la pestaña Consola y podrás ejecutar código JS, ver los logs del código ejecutado y los errores que haya podido haber. En FF también hay una consola nativa pero es bastante cutre, mejor usa Firebug (y prepárate a que te chupe RAM )
Pon el código tal y como lo tienes ahora para que podamos ayudarte.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 23/11/2011, 11:23
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Variable en InnerHTML

Pongo el código como lo he dejado hasta ahora.He hecho algún cambio,pero no sé si está igual que al principio del tema:

Código Javascript:
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>
  3. <head>
  4. <title>Menu contextual</title>
  5. <link rel="stylesheet" href="g2.css" type="text/css" />
  6. <script type="text/javascript">
  7.  
  8. for(var i = 1; i <= 4; i++){
  9.     var iSuperior = 4;
  10.     var dResult = Math.random();
  11.     dResult = Math.floor(dResult * (iSuperior + 1));
  12.     //var cuadrado = String("d" + dResult);
  13.     var cuadrado="'dd"+ dResult +"'";  
  14.     //alert(cuadrado);
  15.  
  16. switch(dResult){
  17.     case 0:
  18.     var imprimir="<img width='200' height='150' src='2cia6ic.gif'/>"
  19.         document.getElementById(cuadrado).innerHTML= imprimir;
  20.         break;
  21.         case 1:
  22.             var imprimir="<img width='200' height='150' src='966cfcff1a83a6ce3eb7abac493c87e9.gif'/>"
  23.         document.getElementById(cuadrado).innerHTML= imprimir;//document.getElementById(cuadrado).src="966cfcff1a83a6ce3eb7abac493c87e9.gif";  
  24.         break;
  25.         case 2:
  26.         var imprimir="<img width='200' height='150' src='12663d2a1c1fba67cf007be.gif'/>"
  27.         document.getElementById(cuadrado).innerHTML= imprimir;
  28. //document.getElementById(cuadrado).src="12663d2a1c1fba67cf007be.gif";     
  29.         break;
  30.         case 3:
  31.                 var imprimir="<img width='200' height='150' src='97ad6f9782f8090599ee0a2.gif'/>"
  32.         document.getElementById(cuadrado).innerHTML= imprimir;
  33.         //document.getElementById(cuadrado).src="97ad6f9782f8090599ee0a2.gif";     
  34.         break;
  35.         case 4:
  36.         var imprimir="<img width='200' height='150' crc='bfff33331089fc046d0efa1.gif'/>"
  37.         document.getElementById(cuadrado).innerHTML= imprimir;
  38.         //document.getElementById(cuadrado).src="bfff33331089fc046d0efa1.gif";
  39.         break;
  40.         case 6:
  41.         var imprimir="<img width='200' height='150' src='d777c8de014bfb21d3647ff.gif'/>"
  42.         document.getElementById(cuadrado).innerHTML= imprimir;
  43.         //document.getElementById(cuadrado).src="d777c8de014bfb21d3647ff.gif";
  44.         break;
  45.         default:
  46.         document.getElementById(cuadrado).src="966cfcff1a83a6ce3eb7abac493c87e9.gif";
  47.         break; 
  48.     }
  49.     document.writeln("Entre 0 y " + iSuperior + " aleatorio " + i + " : " + dResult);
  50.     document.writeln("<br>");
  51.     if(dResult > iSuperior) document.writeln("Rango erroneo");
  52.     }
  53. </script>
  54. </head>
  55. <body>
  56. <div id="d0" style="width:200px; float:left;"><img id="dd0" src="2cia6ic.gif" value="1" width="200" height="150"/></div>
  57. <div id="d1"  style="width:200px; float:left;"><img id="dd1" src="2cia6ic.gif" value="1" width="200" height="150"/></div>
  58. <div id="d2"  style="width:200px; float:left;"><img id="dd2" src="2cia6ic.gif" value="1" width="200" height="150"/></div>
  59. <div id="d3"  style="width:200px; float:left;"><img id="dd3" src="2cia6ic.gif" value="1" width="200" height="150"/></div>
  60. <div id="d4"  style="width:200px; float:left;"><img id="dd4" src="2cia6ic.gif" value="1" width="200" height="150"/></div>
  61.  
  62.  
  63. </body>
  64. </html>

Probé incluso con la propiedad src cambiandolo por el img en lugar del div,pero me salía el mismo error...
Muchas gracias por el interes _cronos2 y perdona las molestias.
__________________
Poco a poco,avanzando en Javascript....
  #8 (permalink)  
Antiguo 23/11/2011, 12:05
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Variable en InnerHTML

Y... ¿qué has cambiado exactamente? Yo lo veo bastante igual, revisa mi otro post, reléelo y aplica los cambios.
Saludos.
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #9 (permalink)  
Antiguo 23/11/2011, 14:24
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Variable en InnerHTML

¿pero como puedo aplicar aqui un array?
Me temo que no entiendo lo que me quieres decir con el array...
__________________
Poco a poco,avanzando en Javascript....
  #10 (permalink)  
Antiguo 23/11/2011, 14:35
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Variable en InnerHTML

Cita:
Iniciado por GameAndWatch Ver Mensaje
¿pero como puedo aplicar aqui un array?
Me temo que no entiendo lo que me quieres decir con el array...
Veamos, tú tienes esto:
Código:
switch(dResult){
* * case 0:
* * var imprimir="<img width='200' height='150' src='2cia6ic.gif'/>"
* * * * document.getElementById(cuadrado).innerHTML= imprimir;
* * * * break;
* * * * case 1:
* * * * * * var imprimir="<img width='200' height='150' src='966cfcff1a83a6ce3eb7abac493c87e9.gif'/>"
* * * * document.getElementById(cuadrado).innerHTML= imprimir;//document.getElementById(cuadrado).src="966cfcff1a83a6ce3eb7abac493c87e9.gif"; * 
* * * * break;
* * * * case 2:
* * * * var imprimir="<img width='200' height='150' src='12663d2a1c1fba67cf007be.gif'/>"
* * * * document.getElementById(cuadrado).innerHTML= imprimir;
//document.getElementById(cuadrado).src="12663d2a1c1fba67cf007be.gif";* * * 
* * * * break;
* * * * case 3:
* * * * * * * * var imprimir="<img width='200' height='150' src='97ad6f9782f8090599ee0a2.gif'/>"
* * * * document.getElementById(cuadrado).innerHTML= imprimir;
* * * * //document.getElementById(cuadrado).src="97ad6f9782f8090599ee0a2.gif";* * * 
* * * * break;
* * * * case 4:
* * * * var imprimir="<img width='200' height='150' crc='bfff33331089fc046d0efa1.gif'/>"
* * * * document.getElementById(cuadrado).innerHTML= imprimir;
* * * * //document.getElementById(cuadrado).src="bfff33331089fc046d0efa1.gif";
* * * * break;
* * * * case 6:
* * * * var imprimir="<img width='200' height='150' src='d777c8de014bfb21d3647ff.gif'/>"
* * * * document.getElementById(cuadrado).innerHTML= imprimir;
* * * * //document.getElementById(cuadrado).src="d777c8de014bfb21d3647ff.gif";
* * * * break;
* * * * default:
* * * * document.getElementById(cuadrado).src="966cfcff1a83a6ce3eb7abac493c87e9.gif";
* * * * break;* 
* * }
Que no sé a ti, pero a mí me parece un poco repetitivo. ¿Qué tal si lo ponemos así?
Código:
var URLs = ['url1', 'url2', 'url3', ...]
var makeString = function(url){
 return "<img width='200' height='150' src='" + url + ".gif'/>";
}
var cuadrado = document.getElementById(cuadrado);
// Ya tenemos todas las variables, ahora simplemente hacemos
cuadrado.innerHTML = makeString( URLs[dResult] );
Y así, pasas de 33 líneas a tan solo 7.
Espero que ahora te haya quedado claro.
Saludos (:
Edit: Shit, salen asteriscos en vez de espacios, maldito copy&paste
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #11 (permalink)  
Antiguo 23/11/2011, 15:32
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Variable en InnerHTML

sería mas conveniente modificar el src de la imagen que usar innerHTML

Cita:
Iniciado por _cronos2 Ver Mensaje
Edit: Shit, salen asteriscos en vez de espacios, maldito copy&paste
donde se ponga una buena cita, ......
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #12 (permalink)  
Antiguo 23/11/2011, 16:09
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Variable en InnerHTML

Cita:
Iniciado por IsaBelM
sería mas conveniente modificar el src de la imagen que usar innerHTML
También es verdad, vi tanta maraña de código que ni si quiera me paré a pensar en lo que hacía

Cita:
donde se ponga una buena cita, ......
¿A qué hora paso a recogerte? Primero probé con el highlight JS, y me salieron los asteriscos, luego intenté con CODE porque como es texto plano pensé que no daría problemas, y siguieron saliendo, así que dije http://www.youtube.com/watch?v=DKw9cqcpG3o, así se queda XD
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #13 (permalink)  
Antiguo 24/11/2011, 05:57
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Variable en InnerHTML

primero envíame alguna prenda tuya, ya usada, para que mi perro (hurco) se acostumbre a tu olor corporal. en caso contrario, no respondo de su reacción
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #14 (permalink)  
Antiguo 24/11/2011, 09:05
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Variable en InnerHTML

¡Muchas gracias por lo del array!
Así se queda mucho más ordenado.He cambiado aqui cuadrado por cuaadrado para que no diera conflicto en la primera variable donde declaro el nombre.
Pero sigue siendo null aqui:
var cuadrado = document.getElementById(cuadrado);
¿Porqué?¿Es que no se puede poner una variable?
Muchas gracias por la respuesta y perdona que sea tan pesado _cronos2
__________________
Poco a poco,avanzando en Javascript....
  #15 (permalink)  
Antiguo 24/11/2011, 09:27
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Variable en InnerHTML

Si ya lo dije yo, que ni me di cuenta de lo que hacía el código Te dice eso porque ese tag script está antes del div que estás buscando. Las webs se cargan línea por línea, así que si desde JS buscas algo en el DOM que se va a cargar después, no lo va a encontrar. Hay dos opciones: o usas window.onload, para esperar a que cargue toda la página para ejcutar el código; o mueves todo el tag script justo antes de </body> (en realidad bastaría con ponerlo debajo de los divs, pero así te aseguras de que estará todo el DOM cargado).
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #16 (permalink)  
Antiguo 24/11/2011, 11:43
Avatar de GameAndWatch  
Fecha de Ingreso: septiembre-2011
Mensajes: 56
Antigüedad: 12 años, 7 meses
Puntos: 1
Respuesta: Variable en InnerHTML

¿como hago lo del window.load?

Porque estoy revisando el código,ahora no da error pero no carga las imagenes...(lo he puesto entre el </body> y el </html>)
Nota:La ruta es correcta,miro el código fuente pero muestra los cambios.

Edito:¡Ya está arreglado!
Lo he conseguido con window.onload y fijandome mejor en el src.
Muchas gracias por la ayuda. Sois los mejores.
__________________
Poco a poco,avanzando en Javascript....

Última edición por GameAndWatch; 24/11/2011 a las 11:51 Razón: Resolver el problema

Etiquetas: innerhtml
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 20:24.