2009-08-28 7 views
14

Cuando se usa el método sliderToggle, la expresión :visible nunca parece devolver nada que no sea verdadero.slideToggle y: visible

Si utilizo manualmente show/ junto con la expresión :visible funcionará bien.

Ejemplo de fracaso:

jQuery(".fileNode .nodeExpander").click(function() { 
    var notes = jQuery(this).parent().siblings(".fileNotes"); 
    notes.slideToggle ("fast"); 

    var isVisible = notes.is(":visible"); // Always returns true... 

    // Do stuff based on visibility... 
}); 

Ejemplo de trabajo :

jQuery(".fileNode .nodeExpander").click(function() { 
    var notes = jQuery(this).parent().siblings(".fileNotes"); 
    var isVisible = notes.is(":visible"); 

    if (isVisible) 
     notes.hide("fast"); 
    else 
     notes.show("fast"); 

    // Do stuff based on visibility... 
}); 

algo de HTML:

<ul> 
    <li class="fileNode"> 
     <img src="<%= Url.Content ("~/Images/Collapse.png") %>" alt="<%= UIResources.CollpaseAltText %>" class="nodeExpander" /> 
    </li> 
    <li class="fileLink"> 
     <%= Html.ActionLink (file.Name, "Details", new { id = file.FileId }) %> 
    </li> 
    <li class="fileNotes"> 
     <%= file.Description %> 
    </li> 
</ul> 

Estoy asumiendo que el slideToggle no lo hace hacer a show/hide - ¿hay algo más que pueda verificar?

Lo he probado en Firefox 3.5, IE 7, 8 y Chrome 4 ... todo con los mismos resultados.

Gracias, K

Respuesta

27

Su primera (que no funciona) fragmento de código se prueba :visible mientras slideToggle es a mediados de transición (más precisamente, se pone a prueba justo después comienza la transición.) Independientemente de si usted' Al volver a abrir o cerrar, el estado de transición media será :visible, por lo que siempre obtendrá true.

trata de leer antes de llamar .is(":visible")slideToggle

+3

¡Por supuesto! Gracias, siéntete como un muppet ahora - llamando var isVisible =! Notes.is (": visible"); antes del slideToggle obtengo la respuesta requerida. ¡Gracias! – Kieron

+0

Es un poco contra-intuitivo, pero tiene mucho sentido. Si solo tenemos un estado de deslizamiento interno para el objeto jQuery ... –

2

trate de añadir un manejador.

notes.slideToggle ("fast", function() { 
    var isVisible = notes.is(":visible"); 
});