Domanda

Quando si utilizza il metodo sliderToggle, l'espressione :visible non sembra mai tornare qualcosa di diverso da vero.

Se uso manualmente show / hide in collaborazione con l'espressione :visible che funzionerà bene.

Esempio di fallimento :

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...
});

Esempio di lavoro :

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...
});

Alcuni 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>

Sto assumendo che il slideToggle non fare un show / hide - c'è qualcos'altro che posso controllare

?

Ho provato in Firefox 3.5, IE 7, 8 e Chrome 4 ... tutti con gli stessi risultati.

Grazie, K

È stato utile?

Soluzione

Il tuo primo (non funzionante) frammento di codice proverà :visible mentre slideToggle è a metà di transizione (più precisamente, mette alla prova solo dopo la transizione inizia.) Indipendentemente dal fatto che si sta aprendo o la chiusura, il mid-transizione stato sarà :visible -. in modo da ottenere sempre true

Prova a controllare .is(":visible") prima di chiamare slideToggle

Altri suggerimenti

Prova ad aggiungere un gestore.

notes.slideToggle ("fast", function() { 
  var isVisible = notes.is(":visible");
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top