2011-12-23 6 views
42

Sto provando a scrivere uno script che nasconde/mostra div a seconda della visibilità di altri elementi. L'azione dovrebbe aver luogo quando clicco su un altro elemento. Ecco quello che ho scritto finora:jQuery if statement to check visibility

$('#column-left form').hide(); 
    $('.show-search').click(function() { 
     $('#column-left form').stop(true, true).slideToggle(300); 
     if($('#column-left form').css('display') == 'none') { 
      $("#offers").show(); 
     } else { 
      $('#offers').hide(); 
     } 
    }); 

nasconde la div, ma non torna quando mi nascondo la forma. Sarà grato per qualsiasi aiuto :)

edit:

Ok, sono riuscito a achive l'effetto desiderato scrivendo questo:

$('#column-left form').hide(); 
    $('.show-search').click(function() { 
     if ($('#column-left form').is(":hidden")) { 
      $('#column-left form').slideToggle(300); 
      $('#offers').hide(); 
     } else { 
      $('#column-left form').slideToggle(300); 
      $("#offers").show(); 
     } 
    }); 

Non so se è scritto correttamente, ma funziona;) Grazie a tutti per l'aiuto!

risposta

115

È possibile utilizzare .is(':visible') per verificare se qualcosa è visibile e .is(':hidden') al banco di prova per il contrario:

$('#offers').toggle(!$('#column-left form').is(':visible')); // or: 
$('#offers').toggle($('#column-left form').is(':hidden')); 

Riferimento:

+1

Restituisce 'true' se l'elemento è visibile o' false' se non lo è. Vale la pena notare.;) – Purag

+5

"per verificare se" il tipo di implica che restituisce un valore booleano;) – ThiefMaster

+0

@Purmou:! $ ('# Column-left form'). Is (': visible') restituirà sicuramente un valore booleano tuttavia questa istruzione è racchiuso all'interno di commutazione quindi dovrebbe raggiungere l'output desiderato. –

2

provare

if ($('#column-left form:visible').length > 0) { ... 
+0

Non funzionerà, anche un oggetto jQuery vuoto restituisce 'true' in un contesto booleano (' !! [] === true'). Si potrebbe aggiungere '.length' anche se per farlo funzionare., – ThiefMaster

+0

@ThiefMaster: ho modificato la risposta di kontur, quindi ora è corretta! – NickGreen

+1

Ty, downvote rimosso. Tralascio il>> 0 anche se la lunghezza non sarà mai negativa comunque. – ThiefMaster

1
$('#column-left form').hide(); 
$('.show-search').click(function() { 
    $('#column-left form').stop(true, true).slideToggle(300); //this will slide but not hide that's why 
    $('#column-left form').hide(); 
    if(!($('#column-left form').is(":visible"))) { 
     $("#offers").show(); 
    } else { 
     $('#offers').hide(); 
    } 
    }); 
4

Sì, è possibile utilizzare .is(':visible') in jQuery. Ma mentre il codice è in esecuzione con il browser safari .is(':visible') non funzionerà.

Quindi, si prega di utilizzare il codice qui sotto

if($(".example").offset().top > 0) 

La linea di cui sopra funzionerà sia IE e Safari anche.

0

Dopo aver sistemato un problema di prestazioni connessi con l'uso di .is (": visibili"), mi sento di raccomandare contro le risposte di cui sopra e di utilizzare invece il codice di jQuery per decidere se un singolo elemento è visibile:

$.expr.filters.visible($("#singleElementID")[0]); 

Ciò che è .is è controllare se un insieme di elementi si trova all'interno di un altro insieme di elementi. Quindi cercherai il tuo elemento nell'intero insieme di elementi visibili sulla tua pagina. Avere 100 elementi è abbastanza normale e potrebbe richiedere alcuni millisecondi per cercare attraverso la matrice di elementi visibili. Se stai creando un'app web probabilmente ne hai centinaia o forse migliaia. La nostra app a volte prendeva 100ms per $ ("selettore #"). È (": visible") poiché stava verificando se un elemento si trovava in una matrice di 5000 altri elementi.

0

se visibile.

$("#Element").is(':visible'); 

se è nascosto.

$("#Element").is(':hidden');