2011-03-05 21 views
35

que tienen una función de JavaScript que tiene este aspecto:¿Establecer clase con jquery?

function UpdateFilterView(){ 

    if(_extraFilterExists){ 

     if($('#F_ShowF').val() == 1){ 

      $('#extraFilterDropDownButton').attr('class', "showhideExtra_up"); 
      $('#extraFilterDropDownButton').css("display", "block"); 

      if($('#divCategoryFilter').css("display") == 'none'){ 
       $('#divCategoryFilter').show('slow'); 
      } 
      return; 

     } 
     else{ 

      if($('#divCategoryFilter').css("display") == 'block'){ 
       $('#divCategoryFilter').hide('slow'); 
      } 

      $('#extraFilterDropDownButton').css("display", "block"); 
      $('#extraFilterDropDownButton').attr('class', "showhideExtra_down"); 

      return; 

     } 
    } 
    else{ 
     if($('#divCategoryFilter').css("display") != 'none'){ 
       $('#divCategoryFilter').hide('fast'); 
     } 
     $('#extraFilterDropDownButton').css("display", "none"); 
    } 
} 

Esto se desencadena por el siguiente código (desde dentro del $ (document) ready (function() {):

$('#extraFilterDropDownButton').click(function() { 
    if($('#F_ShowF').val() == 1){ 
     $('#F_ShowF').val(0); 
    } 
    else{ 
     $('#F_ShowF').val(1); 
    } 

    UpdateFilterView(); 
}); 

El HTML de esto es fácil:

<div id="divCategoryFilter">...</div> 
<div style="clear:both;"></div> 
<div id="extraFilterDropDownButton" class="showhideExtra_down">&nbsp;</div> 

tengo dos problemas con este:

  1. Cuando el panel está oculto y presionamos el botón div (extraFilterDropDownButton), la parte superior izquierda de la página parpadeará y luego el panel se animará hacia abajo.

  2. Cuando se muestra el panel y presionamos el botón div, el panel se ocultará ('lento'), pero el botón no cambiará a la clase correcta incluso cuando lo configuremos en el script UpdateFilterView.

La clase correcta se encuentra en el botón cuando se cierne, esto se establece con el siguiente código:

$("#extraFilterDropDownButton").hover(function() { 
    if($('#divCategoryFilter').css("display") == 'block'){ 
     $(this).attr('class','showhideExtra_up_hover'); 
    } 
    else{ 
     $(this).attr('class','showhideExtra_down_hover'); 
    } 
}, 
function() { 

    if($('#divCategoryFilter').css("display") == 'block'){ 
     $(this).attr('class','showhideExtra_up'); 
    } 
    else{ 
     $(this).attr('class','showhideExtra_down'); 
    } 
}); 
+3

Sólo una sugerencia: su pregunta podría tener una mejor oportunidad de conseguir respondió aquí si publicó un ejemplo de código ** mínimo ** que demostraría su problema, preferiblemente utilizando [jsFiddle] (http://jsfiddle.net/). – rsp

+0

Para resumir ... ¿solo está pidiendo un botón que revelará un div oculto y luego ocultará el div cuando se muestre? –

+1

* "pero el botón no cambiará a la clase correcta" * - ¿Cuál es la clase correcta ...? * "Cuando el panel está oculto" * - no entiendo lo que quiere decir con panel ...? –

Respuesta

13

Uso de jQuery

$(this).addClass('showhideExtra_up_hover'); 

y

$(this).addClass('showhideExtra_down_hover'); 
152

Para configurar una clase por completo, en lugar de anuncios ding uno o eliminación de uno, utilizan este:

$(this).attr("class","newclass"); 

ventaja de esto es que usted va a quitar cualquier clase que pudiera establecerse allí y lo restablece a la forma en que te gusta. Al menos esto funcionó para mí en una situación.

+3

¿Debería ser "** clase **" no "css"? – MGOwen

+0

MGOwen: tienes razón. arreglado. gracias – patrick

+0

Ok. pero el OP también está usando '.attr ('clase'," showhideExtra_down ")' ¿cómo se supone que solucionará el problema ...? –

4
<script> 
$(document).ready(function(){ 
     $('button').attr('class','btn btn-primary'); 
}); </script> 
+4

Creo que sería más útil para el PO y otros visitantes, cuando añadas algunas explicaciones para tu intención. – reporter

+0

Este ejemplo de código ayuda a ver claramente cómo agregar 2 o más clases al usar espacios entre ellas. – Catto

2

me gustaría escribir un pequeño plugin para hacer las cosas más limpio:

$.fn.setClass = function(classes) { 
    this.attr('class', classes); 
    return this; 
}; 

De esa manera usted puede simplemente hacer

$('button').setClass('btn btn-primary'); 
Cuestiones relacionadas