Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Cambiar el color de un td con DOM

Estas en el tema de Cambiar el color de un td con DOM en el foro de Javascript en Foros del Web. Hola a todos, hace unos días inicie un tema para que alguien me ayudara a crear una tabla con JavaScript, bien pues eso ya lo ...
  #1 (permalink)  
Antiguo 28/11/2014, 05:50
 
Fecha de Ingreso: noviembre-2014
Mensajes: 27
Antigüedad: 9 años, 5 meses
Puntos: 0
Cambiar el color de un td con DOM

Hola a todos, hace unos días inicie un tema para que alguien me ayudara a crear una tabla con JavaScript, bien pues eso ya lo conseguí. Ahora lo que necesito es que las celdas de esa tabla cambien de color al hacer click sobre ellas, pero no me funciona.

Este es mi código HTML:
Código HTML:
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title></title>
	<script type="text/javascript" src="js/funciones.js"></script>
</head>
<body onload="crearTabla()">
	<header></header>
	<article>
		<section id="butaca">
			<p id="numsala"></p>
			<p id="titulo"></p>
			<table id="tabla" onclick="funcionTabla()"></table>
		</section>
	</article>
</body>
</html> 
Y este es mi JavaScript
Código Javascript:
Ver original
  1. var columna=new Array();
  2. columna[0]=1;
  3. columna[1]=2;
  4. columna[2]=3;
  5. columna[3]=4;
  6. columna[4]=5;
  7. columna[5]=6;
  8. var filas=new Array();
  9. filas[0]=1;
  10. filas[1]=2;
  11. filas[2]=3;
  12. filas[3]=4;
  13. filas[4]=5;
  14. var tabla=new Array();
  15. tabla[0]=columna;
  16. tabla[1]=filas;
  17.  
  18. function crearTabla(){
  19.     var tbl = document.getElementById("tabla");
  20.     var tblBody = document.createElement("tbody");
  21.     for (var i = 0; i < columna.length; i++) {
  22.         var fila = document.createElement("tr");
  23.         for (var j = 0; j < filas.length; j++) {
  24.             var celda = document.createElement("td");
  25.             var textoCelda = document.createTextNode(i+"-"+j);
  26.             celda.appendChild(textoCelda);
  27.             fila.appendChild(celda);
  28.         }
  29.         tblBody.appendChild(fila);
  30.     }
  31.     tbl.appendChild(tblBody);
  32.     tbl.setAttribute("border", "2");
  33. }
  34.  
  35. function funcionTabla(){
  36.     var td=document.getElementsByTagName('td');
  37.     td.addEventListener('click',cambiaColor,false);
  38. }
  39.  
  40. function cambiaColor(e){
  41.     var asiento=e.target;
  42.     if(asiento.style.background=='green'){
  43.         asiento.style.background='orange';
  44.     }
  45.     else{
  46.         asiento.style.background='green';
  47.     }
  48. }

El error me da en la función funcionTabla(), más concretamente en la segunda línea de la función. Por que me da este error y a que se debe y que posible solución puedo hacer.
Muchas gracias por la ayuda
  #2 (permalink)  
Antiguo 28/11/2014, 06:44
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 9 años, 9 meses
Puntos: 44
Respuesta: Cambiar el color de un td con DOM

Estás intentando levantar las celdas antes de que sean cargadas por el DOM. Podés hacer algo mucho más sintético dejando tu JS de la siguiente manera:

Código Javascript:
Ver original
  1. var columna=new Array();
  2. columna[0]=1;
  3. columna[1]=2;
  4. columna[2]=3;
  5. columna[3]=4;
  6. columna[4]=5;
  7. columna[5]=6;
  8. var filas=new Array();
  9. filas[0]=1;
  10. filas[1]=2;
  11. filas[2]=3;
  12. filas[3]=4;
  13. filas[4]=5;
  14. var tabla=new Array();
  15. tabla[0]=columna;
  16. tabla[1]=filas;
  17.          
  18. function crearTabla(){
  19.     var tbl = document.getElementById("tabla");
  20.     var tblBody = document.createElement("tbody");
  21.     for (var i = 0; i < columna.length; i++) {
  22.         var fila = document.createElement("tr");
  23.         for (var j = 0; j < filas.length; j++) {
  24.             var celda = document.createElement("td");
  25.  
  26.             celda.onclick = function(){
  27.                 if(this.style.background=='green'){
  28.                     this.style.background='orange';
  29.                 }else{
  30.                     this.style.background='green';
  31.                 }
  32.             }
  33.  
  34.             var textoCelda = document.createTextNode(i+"-"+j);
  35.             celda.appendChild(textoCelda);
  36.             fila.appendChild(celda);
  37.         }
  38.         tblBody.appendChild(fila);
  39.     }
  40.     tbl.appendChild(tblBody);
  41.     tbl.setAttribute("border", "2");
  42. }

Y eliminando el llamado a functionTabla del click en tu tabla (valga la redundancia):

Código HTML:
<table id="tabla" onclick="funcionTabla()"></table> <!-- Elimina el llamado -->

<table id="tabla"></table> <!-- Que quede así --> 
Saludos :)
  #3 (permalink)  
Antiguo 28/11/2014, 12:24
 
Fecha de Ingreso: noviembre-2014
Mensajes: 27
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Cambiar el color de un td con DOM

Vale muchas gracias por tu ayuda, ya me funciona. Y ahora una pregunta por curiosidad. ¿Si quisiese que al pulsar una celda me apareciese un div oculto lo debería meter hay o en otro sitio:

Código Javascript:
Ver original
  1. celda.onclick=function(){
  2.         div.style.display='block';
  3.     if(this.style.background=='green'){
  4.         this.style.background='orange';
  5.     }
  6.     else{
  7.         this.style.background='green';
  8.     }
  9. }
  #4 (permalink)  
Antiguo 28/11/2014, 13:25
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 9 años, 9 meses
Puntos: 44
Respuesta: Cambiar el color de un td con DOM

Sí. Exactamente ahí. En ese caso va a mostrar el div cuando hagas click en cualquier celda.
  #5 (permalink)  
Antiguo 29/11/2014, 04:43
 
Fecha de Ingreso: noviembre-2014
Mensajes: 27
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Cambiar el color de un td con DOM

Perfecto, muchas gracias eso es lo que quería hacer más o menos

Etiquetas: color, dom, funcion, html, js
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 16:03.