slideToggle e: visibile
-
20-09-2019 - |
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
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");
});