Rileva se è aperta una finestra di dialogo dell'interfaccia utente di jQuery


97

Sto usando una finestra di dialogo dell'interfaccia utente di jQuery. Se è aperto, voglio fare una cosa. Se è chiuso, voglio farne un altro.

La mia domanda è: come faccio a rilevare se una finestra di dialogo dell'interfaccia utente di jQuery è aperta o meno?

Risposte:


173

Se leggi i documenti.

$('#mydialog').dialog('isOpen')

Questo metodo restituisce un booleano (vero o falso), non un oggetto jQuery.


1
Doh! Non so come l'ho trascurato. Grazie.
user208662

1
Come faresti questo test per tutti i dialoghi? Supponiamo che tu abbia dieci diverse finestre di dialogo con init e opzioni separate e desideri verificare se QUALCUNO di essi è aperto, non un selettore specifico?
Kirk Ross

Aggiungi una classe a dette finestre di dialogo, quindi cambia il selettore sul tuo controllo isOpen.
Suipaste

1
in più anche: dieci dialoghi? forse ridurlo riutilizzando un'istanza o due è un pensiero che vale la pena considerare
David

1
Controlla anche se il dialogo è stato anche inizializzato con $("#mydialog").hasClass("ui-dialog-content"). Vedi stackoverflow.com/questions/29528706/…
Autumn Leonard

53

In realtà, devi confrontarlo esplicitamente con il vero. Se la finestra di dialogo non esiste ancora, non restituirà false (come ci si aspetterebbe), restituirà un oggetto DOM.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}

4
Restituisce false nell'ultimo JQuery.
hoyhoy

1
Come faresti questo test per tutti i dialoghi? Supponiamo che tu abbia dieci diverse finestre di dialogo con init e opzioni separate e desideri verificare se QUALCUNO di essi è aperto, non un selettore specifico?
Kirk Ross

2
Forse creare una funzione come $ (". Ui-dialog"). Each (function (/ * check this dialog * /))?
marcovtwout

21

Se vuoi controllare se la finestra di dialogo è aperta su un particolare elemento puoi farlo:

if ($('#elem').closest('.ui-dialog').is(':visible')) { 
  // do something
}

O se vuoi solo controllare se l'elemento stesso è visibile puoi fare:

if ($('#elem').is(':visible')) { 
  // do something
}

O...

if ($('#elem:visible').length) { 
  // do something
}

3
Controllo il mio div se non è inizializzato in questo modo:$dialog.hasClass('ui-dialog-content')
Sergey

Grazie, non sono riuscito a ottenere le risposte precedenti utilizzando "isOpen" per funzionare per me, ma ha funzionato.
Kyle Challis


1

Il commento di Nick Craver è il più semplice per evitare l'errore che si verifica se la finestra di dialogo non è stata ancora definita:

if ($('#elem').is(':visible')) { 
  // do something
}

Dovresti prima impostare la visibilità nel tuo CSS, usando semplicemente:

#elem { display: none; }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.