2012-08-15 38 views
5

como se puede ver en jsfiddle http://jsfiddle.net/C8B8g/7/ Tengo 2 botones (= 2 divs) "La región" y "La fuente". Cada div se resalta (fondo azul) al pasar el mouse (gracias a los contribuidores de stackoverflow porque todavía estoy muy mal en JS).Cambiar el color DIV cuando se hace clic en otro DIV

He notado que los usuarios no se dan cuenta de que se trata de botones, por lo que me gustaría hacer que el primer DIV que contiene el texto "Nuestra región" se resalte con el fondo azul de forma predeterminada y solo vuelve al fondo blanco cuando se hace clic en el otro div que contiene el texto "nuestra fuente" (en ese caso, el fondo de "nuestra fuente" se volvería azul). Hecho algunas pruebas usando "actual" en CSS, pero sin éxito ...

Respuesta

6

Prueba esto: Actualizado: Here is working jsFiddle.

$('.activity-title a:first').css({'background-color':'#f00','color':'#fff'}); 
//for setting first button highlighted by default, 
//don't forgot to define document.ready before this 

$('.activity-title a').click(function() { 
    var region = $(this).attr('data-region'); 

    $('.activity-title a').css({'background-color':'#fff','color':'#467FD9'}); 
    $(this).css({'background-color':'#f00','color':'#fff'}); 

    $('.textzone:visible').stop().fadeOut(500, function() { 
    //don't forgot to add stop() for preventing repeat click conflict 
     $('#' + region).fadeIn(500); 
    }); 

    return false; 

});​ 
+0

Por favor escriba por qué esto se downvoted de mejorar las respuestas. –

+0

Gracias - ¡Funciona muy bien! ¿Hay alguna manera de tener el primer botón resaltado por defecto? (dado que la zona de texto a la derecha es visible, eso ayudaría a las personas a entender que cada botón está asociado a una zona de texto) – Greg

+0

@Greg he actualizado mi respuesta mate, puede asignar estos valores CSS a una clase o ID, y usar removeClass/addClass métodos pero preguntaste cómo cambiar css con jQuery, así que respondí de esta manera. –

1
try with this exemple: 
<div id="target"> 
Test1 
</div> 
<div id="other"> 
    Test2 
</div> 

<script> 
$("#target").click(function() { 
    $('#target').css({'background':'blue'}); 
$('#other').css({'background':'white'}); 
}); 

$("#other").click(function() { 
    $('#other').css({'background':'blue'}); 
    $('#target').css({'background':'white'}); 
}); 
</script> 
5

Añadir estilo para div seleccionado

.source-selected { 
    background-color:#00F; 
} 

Agregar esta clase a tu div predeterminado

Añadir este líneas a su controlador de clic (actualizado)

if(!$(this).closest('.source-title-box').hasClass('source-selected')) 
{ 
    $('.source-title-box').toggleClass('source-selected'); 
} 

Trate violín actualización:

http://jsfiddle.net/dmvcQ/1

+1

Me gusta su enfoque mejor ya que evita el CSS en línea. Sin embargo, esto aplicará la clase alternativamente, no importa en qué enlace haga clic. Debería agregar otra línea antes de la que agregó, algo como esto: '$ ('. Source-selected'). ToggleClass ('source-selected');' – Jeemusu

+0

Probablemente también desee verificar el más cercano ('. source-title-box'), ya que su código los selecciona a todos. – Jeemusu

+0

Tienes razón, estaba tratando de ser rápido;) He arreglado el violín y la respuesta actualizada de acuerdo a tus comentarios. Gracias. –

3

Ok he decidido publicar una respuesta ya que había algunas partes de su código que quería abordar

En primer lugar, en lugar de hacer un return false; al final, puede utilizar la función jQuery event.preventDefault();. El resultado final es básicamente el mismo, sin embargo, al hacerlo de esta manera, podemos usar jQuery para decirle al ancla que no haga nada desde el principio, antes de ejecutar cualquier otro código.

Mi código Javascript actualización:

$('.source-title-box a').click(function(event) { 

    // Stop the default anchor behaviour 
    event.preventDefault(); 

    // Lets check if the clicked link is already active 
    // And if it is active, don't let them click it! 
    if($(this).closest('div').hasClass('active')) { 
     return false; 
    } 

    // Now lets remove any active classes that exist 
    $('.active').toggleClass('active'); 

    // And apply an active class to the clicked buttons 
    // parent div 
    $(this).closest('div').toggleClass('active'); 

    var region = $(this).attr('data-region'); 

    $('.textzone:visible').fadeOut(500, function() { 
     $('#' + region).fadeIn(500); 
    }); 
});​ 

El CSS añadí:

ejemplo
.active { 
    background-color:#467FD9; 
    color:#fff; 

} 
.active a { 
    cursor:default; /* Don't show the hand cursor */ 
    color:#fff; 
} 

Un trabajo:

http://jsfiddle.net/dmvcQ/3/

No estoy seguro de si la corriente de HTML marcado tiene algún otro propósito en mente, pero los estilos actuales y functionali Con solo <a href="#" data-region="source-region">Our region</a>, no es necesario envolverlos en <div> y <span>.

Por ejemplo, aquí es el mismo código, con las etiquetas de anclaje sólo: http://jsfiddle.net/dmvcQ/7/

, hágamelo saber si usted tiene alguna pregunta relacionada con la respuesta.

+1

Gracias por la respuesta Jeemusu! Por alguna razón, en el entorno en vivo (haga clic en la página "la fuente" aquí http://goo.gl/fOHGN), el primer "botón" no se resaltará de manera predeterminada, como en jsfiddle. ¿Sabrías por qué? Gracias – Greg

+1

Agregaste la clase activa al elemento html que se mostrará como seleccionado de forma predeterminada. Comprueba mi violín de Js para ver cómo lo he configurado. – Jeemusu

+0

Vaya, me lo perdí, está bien ahora, ¡muchas gracias por su ayuda! – Greg

1

O puede hacerlo principalmente jQuery

Un ejemplo de trabajo:

http://jsfiddle.net/razmig/GhbjS/

$('.activity-title a:first').css({ 
    "background-color": "#467FD9", 
    "color": "#fff" 
}); 


$('.activity-title a').mouseover(function() { 
    $('.activity-title a').css({ 
     "background-color": "#fff", 
     "color": "#467FD9" 
    }); 
    $(this).css({ 
     "background-color": "#467FD9", 
     "color": "#fff" 
    }); 

}); 

$('.activity-title a').click(function() { 
    var region = $(this).attr('data-region'); 

    $('.textzone:visible').fadeOut(2000, function() { 
     $('#' + region).fadeIn(2000); 
    }); 

    return false; 

}); 
+0

Gracias por su respuesta y el ejemplo de trabajo. Noté que cambiaste el html por href = "#". Desafortunadamente en mi caso (un diseño de página con 1 div por sección) eso no funciona (al hacer clic en el botón hace que la página se desplace hacia arriba) – Greg

+1

simplemente agregue href = "javascript: void (0)" o en jquery u puede usar event.preventDefault(); – Razmig

Cuestiones relacionadas