Foros del Web » Programando para Internet » Javascript »

cambio de color

Estas en el tema de cambio de color en el foro de Javascript en Foros del Web. Hola a todos, Tengo un formulario con varios elementos, y lo tengo colocado en una tabla (en celdas y demás) Ahora, lo que quiero es ...
  #1 (permalink)  
Antiguo 23/03/2007, 07:58
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 2 meses
Puntos: 0
cambio de color

Hola a todos,

Tengo un formulario con varios elementos, y lo tengo colocado en una tabla (en celdas y demás) Ahora, lo que quiero es que, cada vez que pinche en 1 de los elementos, ciertas celdas me cambien de color. Pero no se hacerlo por celdas....
Alguien me puede ayudar ??
  #2 (permalink)  
Antiguo 23/03/2007, 09:10
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: cambio de color

Hola Vane_

No se si habré entendido bien tu duda pero te doy una pista:
Código:
<input type="text" onfocus = "document.getElementById('pepe').style.background = '#FF0'" />
<table>
<tr><td id="pepe">
...
Saludos,
  #3 (permalink)  
Antiguo 23/03/2007, 10:09
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: cambio de color

Hola JavierB. Gracias por tu propuesta, lo he probado y sólo me funciona para una celda, lo pongo en varias y solo me cambia el color de una....

Otra cosa, y para que cuando se quite el foco, que método hay ??
  #4 (permalink)  
Antiguo 23/03/2007, 10:32
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: cambio de color

Hola de nuevo.

Un ejemplo más completo:

Código PHP:
<html>
<
head>
<
script type="text/javascript">
function 
marcar() {
  for (
i=0celda arguments[i]; i++)
    
document.getElementById(celda).style.background '#F0F';
}
</script>
</head>
<body>
<input type="text" onfocus = "marcar('algo1','algo2')" />
<table>
<tr>
<td id="algo1">Celda 1</td>
<td id="algo2">Celda 1</td>
</tr>
</table>
</body>
</html> 
Cuando se quita el foco, se produce el evento onblur

Saludos,
  #5 (permalink)  
Antiguo 23/03/2007, 10:38
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.289
Antigüedad: 18 años, 7 meses
Puntos: 3
Re: cambio de color

intenta crear una funcion que te lo haga en todas...

Código HTML:
<script>
function cambiaColor(obj){
  eval("document.getElementById('td"+obj.name+"').style.background = '#FF0';");
}

</script>

<input type="text" name="pepe" onfocus = "cambiaColor(this);" />
<table>
<tr><td id="tdpepe">
...
fijate que cambie el nombre del TEXT...espero te funcione! suerte!
__________________
Wow! No se que decir...
  #6 (permalink)  
Antiguo 23/03/2007, 10:40
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: cambio de color

Ok, pero mira, si yo pongo este código:

Código PHP:
<html>
<
head>
<
script type="text/javascript">
function 
marcar() {
  for (
i=0celda arguments[i]; i++)
    
document.getElementById(celda).style.background '#F0F';
}
</script>
</head>
<body>
<input type="text" onfocus = "marcar('algo1')" />
<table>
<tr>
<td id="algo1">Celda 1</td>
<td id="algo1">Celda 1</td>
</tr>
</table>
<table>
<tr>
<td>Celda 2</td>
<td id="algo1">Celda 2</td>
</tr>
</table>
</body>
</html> 
Sólo me cambia el color de la primera celda.....

OK, el onblur lo probaré cuando este funcione...
  #7 (permalink)  
Antiguo 23/03/2007, 11:24
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: cambio de color

Rehola.

Fíjate bien en mi ejemplo y verás que es distinto del tuyo. Los id no pueden repetirse, tienen que ser únicos.

Pon id diferentes y cuando llamas a la función le pasas los id que quieres que se cambien:

Código:
<input type="text" onfocus = "marcar('algo1','algo2')" />
Saludos,
  #8 (permalink)  
Antiguo 23/03/2007, 11:29
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: cambio de color

Ahhh ok!! Yo pense que se podían poner ids iguales !!!! Hecho !!

Muchas gracias.
  #9 (permalink)  
Antiguo 25/03/2007, 15:29
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: cambio de color

Para cambiar el color de una tabla entera se puede hacer igual pero en la etiqueta <table> ?
  #10 (permalink)  
Antiguo 26/03/2007, 00:50
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: cambio de color

Hola Vane_

Ponle un id a la tabla, lo pruebas y nos cuentas.

Saludos,
  #11 (permalink)  
Antiguo 26/03/2007, 05:28
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: cambio de color

Que va, eso tampoco me funciona. Ni para una fila, solo me ha funcionado para celdas....
  #12 (permalink)  
Antiguo 26/03/2007, 05:35
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: cambio de color

Hola.

Acabo de probar esto y sí me ha funcionado:

Código:
<input type="text" onfocus = "document.getElementById('pepe').style.background = '#FF0'" />
<table id="pepe">
Saludos, :adios.
  #13 (permalink)  
Antiguo 26/03/2007, 06:08
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: cambio de color

Gracias por contestar JavierB. Lo he peusto en otra tabla, y sólo me cambia el color a una parte de ella, porqué puede ser ???
  #14 (permalink)  
Antiguo 26/03/2007, 06:22
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 2 meses
Puntos: 772
Re: cambio de color

Es muy raro ¿Puedes poner el código HTML y JavaScript que estás usando?

Saludos,
  #15 (permalink)  
Antiguo 26/03/2007, 06:30
 
Fecha de Ingreso: febrero-2007
Mensajes: 244
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: cambio de color

Mira, por ejemplo, la tabla la pongo así:

Cita:
<table width="100%" height="28" border="0" cellpadding="0" cellspacing="0" id="tablaestad">
Cuando pulso en los elementos que quiero que haga el cambio de color a la tabla:

Cita:
<input type="checkbox" name="estadisticas_num_visitas" value="activado" <?php if ($estadisticas_num_visitas2 == "activado") echo "checked"; ?> onFocus="marcar('tablaestad')" />
Y la función javascript:

Cita:
<script type="text/javascript">
function marcar() {
for (i=0; celda = arguments[i]; i++) {
document.getElementById(celda).style.background = '#255885';
}
}
</script>
  #16 (permalink)  
Antiguo 26/03/2007, 13:30
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: cambio de color

Oye, que me ha picado el gusanillo de hacer algo sin tocar demasiado el HTML:

Código PHP:
<table id="tabla1" border="1">
    <
tr>
        <
td>a</td>
        <
td>e</td>
    </
tr>
    <
tr>
        <
td>i</td>
        <
td>o</td>
    </
tr>
</
table>

<
table id="tabla2" border="1">
    <
tr>
        <
td>1</td>
        <
td>2</td>
        <
td>3</td>
        <
td>4</td>
    </
tr>
    <
tr>
        <
td>5</td>
        <
td>6</td>
        <
td>7</td>
        <
td>8</td>
    </
tr>
</
table>

<
table id="tabla3" border="1">
    <
tr>
        <
td>A</td>
    </
tr>
    <
tr>
        <
td>B</td>
    </
tr>
    <
tr>
        <
td>C</td>
    </
tr>
    <
tr>
        <
td>D</td>
    </
tr>
</
table>

<
script>

/******************
    FUNCIÓN PARA APLICAR LOS EVENTOS A LAS CELDAS
******************/

// recorre los hijos hasta encontrar un TD, cuando encuentre aplica un evento mouseover mOver y mouseout mOut
function recorrerHijos(elem,mOver,mOut) {
    if(
elem.nodeType==&& elem.tagName=="TD") {    // tipo ELEMENT_NODE y encima es TD
        
elem.onmouseover=mOver;        //aplicamos evento
        
elem.onmouseout=mOut;        //aplicamos evento
    
}
    else if (
elem.nodeType==&& elem.hasChildNodes() ) {        //ELEMENT_NODE y encima con hijos
        
for(var hijo=0hijo<elem.childNodes.lengthhijo++)        //recorremos cada hijo con la función, recursivamente
            
recorrerHijoselem.childNodes[hijo] , mOvermOut);
    }
}


/******************
    FUNCIONES PARA COLOREAR CELDAS, FILAS O TABLAS (según tagPadre)
******************/
function colorea(celda,tagPadre) {
    
// subiremos un nivel en el DOM mientras el elemento actual no tenga el tag tagPadre
    
while( celda.nodeType==&& celda.tagName.toUpperCase()!=tagPadre.toUpperCase() )
        
celda=celda.parentNode;
    
celda.style.backgroundColor="#aaf";
}
function 
desColorea(celda,tagPadre) {
    while( 
celda.nodeType==&& celda.tagName.toUpperCase()!=tagPadre.toUpperCase() )
        
celda=celda.parentNode;
    
celda.style.backgroundColor="#fff";
}

/******************
    APLICACIÓN DE LOS EVENTOS QUERIDOS A LAS TABLAS DESEADAS
******************/

var tablasConEfecto=["tabla1","tabla2"];
for(var 
a in tablasConEfecto) {
    var 
tablaActual=tablasConEfecto[a];
    var 
elem=document.getElementById(tablaActual);
    
recorrerHijos(elem
        Function(
"colorea(this,'TR')"), 
        Function(
"desColorea(this,'TR')"
    );
}

</script> 
Me ha gustado sobre todo hacer la función genérica colorea y desColorea, que según se le digan qué argumentos hace una cosa u otra:
colorea(this,"TD") -> colorea la celda
colorea(this,"TR") -> colorea la fila
colorea(this, "TABLE") -> colorea la tabla
(indistintamente de las mayúsculas y minúsculas, y siempre con el this.

Lo que hace es buscar el padre de this (de la celda) que tiene ese tag. Si el tag es "TD" no busca padre ninguno.




Es genérico casi todo, sólo hay que añadir los id's a tablasConEfecto y escoger los colores y elementos a colorear, fácil y reutilizable (y no ensucia el html).


Contadme vuestra opinión
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
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 15:14.