2010-05-31 21 views
13

Después de que el usuario haga clic en una fila de la tabla, quiero que compruebe si el color de fondo de la fila de la tabla es blanco, y si es así, cambiará el color a azul claro.¿Cómo verifico el valor de css usando jQuery?

El código que estoy usando no funciona. Aquí está:

$("#tracker_table tr#master").click(function(){ 
    if($(this).css("background-color") == "#FFFFFF") { 
    $(this).css("background-color", "#C2DAEF"); 
    } 
}); 

Creo que hay algo mal con mi sentencia if. ¿Cómo verifico el valor de css usando jQuery?

+1

Es posible que desee echar un vistazo a este blog [La comparación de colores con JavaScript] (http://radio.javaranch.com/pascarello/2005/05 /19/1116513366466.html). Aparentemente, los navegadores diferentes representan los colores de forma diferente, o lo hicieron en 2005. – R0MANARMY

Respuesta

20

parece que se volvió en forma rgb(x, y, z), por lo que el código debe ser:

$("#tracker_table tr#master").click(function(){ 
    if($(this).css("background-color") == "rgb(255, 255, 255)") { 
    $(this).css("background-color", "#C2DAEF"); 
    } 
}); 

Editar: Dicho esto, me gustaría sugerir que utilice clases en lugar de inspeccionar/ajustar las propiedades de CSS directamente . Algo como esto:

$("#tracker_table tr#master").click(function(){ 
    if(!$(this).hasClass("selected")) { 
    $(this).addClass("selected"); 
    } 
}); 

Css:

tr { background-color: #FFFFFF; } 
tr.selected { background-color: #C2DAEF; } 
+0

Eso todavía no funciona. Hay algo mal con mi sentencia if, porque traté de agregar una alerta dentro de la declaración if y nunca me avisaron, así que sé que la sentencia if no está funcionando correctamente. – zeckdude

+0

@zeckdude: ¿En qué navegador estás probando? No puedo ver ningún problema con su declaración if y el formato 'rgb (...)' definitivamente se devuelve en Firefox y Webkit al menos, pero tal vez depende del navegador como @ R0MANARMY sugiere en su comentario sobre su pregunta (por lo general, jQuery intenta ocultar estas rarezas del navegador cruzado) ... Puedes intentar mi segunda sugerencia en la edición anterior. – Alconja

3

bien esto puede funcionar, en efecto, que está almacenando la información en forma de colores, y luego recuperar y comparar esta información más adelante. Alconja sugiere un enfoque que funcionará, pero, en última instancia, es mejor que trabajes con clases, cuyos nombres puedes definir con el significado adecuado. Es mucho más amigable y menos frágil para tener algo como esto:

$('#tracker_table tr#master').click(function(){ 
    if ($(this).hasClass('something')) { 
     $(this).removeClass('something').addClass('something_else'); 
    } 
}) 
+0

Este es probablemente el camino a seguir, supongo que los colores tienen algún tipo de significado como "fila seleccionada" o lo que sea. – R0MANARMY

+2

¿Qué pasa si las partes interesadas de su proyecto deciden que sea lo que sea que signifique el blanco ahora, preferirían que sea de color gris claro? No, no ese gris, otro gris. Y haz que el azul sea un poco más verde, también. Usar nombres de clase semánticos significa un cambio fácil en su hoja de estilo, y su código continúa significando lo que dice. Si solo está 'seleccionado', entonces sí, es bastante fácil. tr class = "selected", versus no class. –

Cuestiones relacionadas