Foros del Web » Programando para Internet » Javascript »

Problema con el atributo backgroundColor

Estas en el tema de Problema con el atributo backgroundColor en el foro de Javascript en Foros del Web. Buenas, soy nuevo en este foro, así que no estoy seguro de que este problema se haya expuesto en otro apartado anteriormente. Mi problema es ...
  #1 (permalink)  
Antiguo 02/07/2011, 08:48
 
Fecha de Ingreso: julio-2011
Mensajes: 6
Antigüedad: 12 años, 9 meses
Puntos: 0
Problema con el atributo backgroundColor

Buenas, soy nuevo en este foro, así que no estoy seguro de que este problema se haya expuesto en otro apartado anteriormente.

Mi problema es el siguiente:
Estoy creando un calendario integramente con JavaScript y he conseguido cambiar de mes, de año, e incluso que reconozca los dias de casa mes. Lo he creado con tablas, a partir de la funcion createElement(). Pero al intentar seleccionar una celda no consigo que me reconozca una sezilla linea de codigo, en la que asigno el rojo como el color de fondo de la celda que llama a la funcion selectCelda().

El cogido JS de la funcion en cuestion es el siguiente:
Código:
   function selectCelda(celdaActual) {
/* Si el contenido del campo de la fecha es igual al de la celda seleccionada lo borra y la deseleciona.*/
    if (document.getElementById('formFecha').value == fechaCelda(celdaActual)) {

     celdaActual.style.backgroundColor = "white";
     document.getElementById('formFecha').value = "";
     return false;
/* Si el contenido del campo de la fecha, no esta vacio ni es el actual, es decir, es otro, debe borrar y volver a crear la tabla para deseleccionar el otro, sea cual sea, y seleccionar el nuevo*/
    } else if (document.getElementById('formFecha').value != "" && document.getElementById('formFecha').value != fechaCelda(celdaActual)) {

     while (nodoTabla4.firstChild) {     

      nodoTabla4.removeChild(nodoTabla4.firstChild);

     }

     crearTabla4();    
     celdaActual.style.backgroundColor = "red";
     document.getElementById('formFecha').value = fechaCelda(celdaActual);
/*Si el campo de la fecha esta vacio selecciona la celda en cuestion.*/
    } else {

     celdaActual.style.backgroundColor = "red";
     document.getElementById('formFecha').value = fechaCelda(celdaActual);

    }

   }
Supongo que el problema es que al borrar el contenido del nodoTabla 4 con el bucle, me impide de algun modo, no se porque, que cambie el color de la celda recien creada.

El parametro celdaActual es siempre la propia celda que llama la funcion, pues al crear la celda le asigno el atributo onclick con el valor "selectCelda(this).

La funcion fechaCelda() es simplemente la que obtiene la cadena de texto a partir de contenido de la celda y de otras variables externas(como el mes y el año seleccionados).

El codigo completo es mucho mas largo, asi que si para entender el problema fuera necesario que pusiera algun otra funcion, pidanlo.

Gracias de antemano.
  #2 (permalink)  
Antiguo 02/07/2011, 10:27
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años
Puntos: 1485
Respuesta: Problema con el atributo backgroundColor

buenas,
Cita:
Supongo que el problema es que al borrar el contenido del nodoTabla 4 con el bucle, me impide de algun modo, no se porque, que cambie el color de la celda recien creada.

El parametro celdaActual es siempre la propia celda que llama la funcion, pues al crear la celda le asigno el atributo onclick con el valor "selectCelda(this).
ahi es donde esta tu problema. cuando invocas la funcion, le pasa a este como referencia la celda donde se presiono. cuando borras las celdas de la tabla, el elemento celdaActual no existe en el documento aunque la variable contenga una referencia a dicho elemento. incluso cuando lo vuelves a recrear, celdaActual sigue siendo un elemento distinto al presente en la nueva tabla. simplemente porque son referencias distintas.

a mi juicio, me parece poco apropiado tener que vaciar la tabla para simplemente cambiar la apariencia visual de una celda. lo que deberias hacer es tener una variable que funcione como tracker o ultimo estado. es decir, es una variable que mantendra la referencia de la celda activada hasta el momento. luego, cuando quieras cambiar la celda activiada, primero determina si la variable contiene alguna referencia. de ser cierto, restaura la apariencia desde dicha variable. luego asigna la nueva referencia -elemento seleccionado- a la variable. para deseleccionar la misma celda, simplemente restaura la apariencia y asigna como valor null a la variable para indicar que no hay ninguna celda seleccionada.

__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #3 (permalink)  
Antiguo 02/07/2011, 16:19
 
Fecha de Ingreso: julio-2011
Mensajes: 6
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Problema con el atributo backgroundColor

Bueno, entiendo la idea, pero no se como debo tratar la variable referente a la celda que este anteriormente activada para que sea independiente de la que quiero seleccionar posteriormente.
  #4 (permalink)  
Antiguo 02/07/2011, 16:23
 
Fecha de Ingreso: julio-2011
Mensajes: 6
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Problema con el atributo backgroundColor

Ya lo he conseguido! Muchas gracias, havia pensdo en algo asi pero no sabia ni por asomo como hacerlo!

Etiquetas: js, style, tabla, background-color
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 09:48.