2010-12-22 14 views
9

Tengo el siguiente código:¿Cómo cambio CSS con jQuery?

$('#bc' + $.trim($this) + ' span.dashed-circle').css({ 'border' : '5px solid #000'}); 

que se desencadena por un click.function().

Me gustaría que fuera un conmutador, por lo que cuando hago clic en el elemento, cambia el borde a lo que tengo arriba ... pero cuando vuelve a hacer clic desaparece o más bien establece el borde en ''.

¿Pensamientos?

Editar: Debería haber sido explícito ... pero no quiero crear una clase de CSS. La razón es porque cuando hago eso, daña el formato del elemento que se está creando. Estoy seguro de que es una pequeña peculiaridad en algún lugar que lo solucionaría, pero no estoy interesado en recorrer la base de códigos completa para solucionar pequeños problemas de posicionamiento con una nueva clase. Prefiero simplemente editar el atributo css directamente, porque no interfiere con el diseño.

Edit2: Aquí está el jsfiddle of the code que estoy tratando de editar. Si lo notas, tengo los atributos de CSS al final. ¿Pero cómo dejo que eso se alterne?

Edit3: Si alguien está interesado ... la interfaz de usuario que se usará en la aplicación de web es para mi - http://www.compversions.com

+0

mira el alternador de jquery: http://api.jquery.com/toggle/ – Cliff

+0

Eso fue lo primero que hice, pero debido a la forma en que mi código es, me estaba dando problemas. Por eso vine aquí. – marcamillion

Respuesta

16
$("trigger-element").toggle(function() { 
    $(element-to-change).css({ 'border' : '5px solid #000'}); 
    }, function() { 
    $(element-to-change).css({ 'border' : 'none'}); 
}); 

Trate Esta

$(document).ready(function() { 
     $('#panels tr table tr').toggle(function() { 
      var $this = $(this), 
       tr_class = 'dash-elem-selected'; 
      if (!$this.parent('thead').length) { 
       if ($this.hasClass(tr_class)) { 
        $this.removeClass(tr_class); 
        tr_class = 'removeClass'; 
       } else { 
        $this.addClass(tr_class).siblings().removeClass(tr_class); 
        tr_class = 'addClass'; 
       } 
       $this = $this.parents('td table').siblings('.sit-in-the-corner').text(); 
       $('#bc' + $.trim($this) + ' span')[tr_class]('bc-dotted-to-solid'); 
       $('#bc' + $.trim($this) + ' span.dashed-circle').css({ 'border' : '5px solid #000'}); 
      } 
     }, function() { 
    //This is your new function that will turn off your border and do any other proccessing that you might need. 
$('#bc' + $.trim($this) + ' span.dashed-circle').css({ 'border' : 'none'}); 
}); 
    }); 
+0

Creo que esto es lo más cercano a lo que quiero hacer. – marcamillion

+0

Sin embargo, no estoy seguro de cómo aplicarlo a mi código: http://jsfiddle.net/BMWZd/4/ ¿Pensamientos? – marcamillion

+0

Pruebe mi edición anterior. – Cole

4

Use toggle.

$("#IDOfElementYouClickOn").toggle(
     function(){$('#bc' + $.trim($this) + ' span.dashed-circle').css({ 'border' : '5px solid #000'});}, 
     function(){$('#bc' + $.trim($this) + ' span.dashed-circle').css({ 'border' : ''});} 
    ); 
+0

Adam, me gusta lo que hizo aquí ... pero no estoy muy seguro de cómo aplicar a mi código. Ver http://jsfiddle.net/BMWZd/4/ para lo que estoy trabajando. También he actualizado la pregunta nuevamente. – marcamillion

15

Haría esto definiendo una clase withborder y togglin g esa clase.

CSS:

.withborder { 
    border: 5px solid #000; 
} 

jQuery:

$('#bc' + $.trim($this) + ' span.dashed-circle').click(function(){ 
    $(this).toggleClass('withborder'); 
}); 
+1

@lonesomeday. Estoy de acuerdo con su análisis excepto por una cosa. OP no dijo que el evento click estaba en '$ ('# bc' + $ .trim ($ this) + 'span.'' '' –

+1

@ John Hartsock. Leo '' cuando hago clic en el elemento '' como referencia al elemento al que se hace referencia en el selector. – lonesomeday

+1

@lonesomeday Su suposición puede ser correcta, pero solo quería señalarlo. –

12

se podría crear una clase CSS para este

.specialborderclass { 
    border: 5px solid #000; 
} 

A continuación, en javascript alternar la clase utilizando jQuery toggleClass() method

$('.yourSelector').toggleClass("specialborderClass"); 
+1

sin '.' en el nombre de la clase cuando se llama' toggleClass ("specialvorderClass") ' – hunter

+0

@hunter .... sí gracias. –

+0

Gracias por este John, pero no quiero otra clase. Quiero simplemente editar el CSS. He actualizado la pregunta para reflejar esto. – marcamillion