2009-07-28 17 views
12

Ho un div che contiene le impostazioni e le opzioni in una pagina di gestione dell'account.jQuery alterna e IF visibile

$("#moreOptions").slideToggle('slow'); 
if ($("#moreOptions").is(":visible") == true) { 
    $("#lnkMoreOpt").text("Less Options «") 
} 
else { 
    $("#lnkMoreOpt").text("More Options »") 
} 

Il codice di cui sopra dovrebbe modificare il testo del/meno di collegamento più opzioni a seconda se è visibile o no, comunque sembra jQuery non tratta commutando come è invisibile/visibile.

Come posso implementarlo mentre utilizzo ancora la funzione di commutazione?

+0

so che questo è vecchio, ma un'altra opzione sarebbe probabilmente per controllare il valore prima di avviare l'interruttore. – eselk

risposta

33

È necessario utilizzare la funzione di richiamata. Nel momento in cui viene valutata l'istruzione if, slideToggle non verrà completata e otterrete risultati errati.

$("#moreOptions").slideToggle('slow', callbackFn); 

function callbackFn(){ 

    var $link = $("#lnkMoreOpt"); 

    $(this).is(":visible") ? $link.text("Less Options «") : $link.text("More Options »"); 


} 
+0

Ottima risposta, funziona alla grande! Grazie. – j82374823749

+0

Nessun problema, buona fortuna. – redsquare

1

preferisco non usare funzioni distinte, perché quando una funzione non ha bisogno di essere usato due volte, è spreco di codice .. Credo che questo sia più facile da capire quando qualcuno viene a esso ..

$("#moreOptions").slideToggle('slow', function(){ 
    var $link = $("#lnkMoreOpt"); 
    $(this).is(":visible") ? $link.text("Less Options «") : $link.text("More Options »"); 
}); 
0

penso che questo codice funziona

$('#element').toggle('slow', function() { 
    if($(this).is(':hidden')) { 
     $(this).text('This element is hidden.'); 
    } 
    else { 
     $(this).text('This element is visible.'); 
    } 
});