Detectar si un cuadro de diálogo de la interfaz de usuario de jQuery está abierto

97

Estoy usando un diálogo de interfaz de usuario de jQuery. Si está abierto, quiero hacer una cosa. Si está cerrado, quiero hacer otro.

Mi pregunta es, ¿cómo puedo detectar si un cuadro de diálogo de la interfaz de usuario de jQuery está abierto o no?

usuario208662
fuente

Respuestas:

173

Si lees el docs.

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

Este método devuelve un booleano (verdadero o falso), no un objeto jQuery.

Byron Whitlock
fuente
1
Doh! No sé cómo lo pasé por alto. Gracias.
user208662
1
¿Cómo haría esta prueba para todos y cada uno de los diálogos? Supongamos que tiene diez cuadros de diálogo diferentes con opciones y opciones independientes y desea probar si ALGUNO de ellos está abierto, no un selector específico.
Kirk Ross
Agregue una clase a dichos cuadros de diálogo, luego cambie el selector en su verificación isOpen.
Suipaste
1
más también: diez diálogos? tal vez reducir eso reutilizando una instancia o dos es un pensamiento que vale la pena considerar
David
1
Compruebe también si el diálogo incluso se ha inicializado con $("#mydialog").hasClass("ui-dialog-content"). Ver stackoverflow.com/questions/29528706/…
Autumn Leonard
53

En realidad, tienes que compararlo explícitamente con verdadero. Si el cuadro de diálogo aún no existe, no devolverá falso (como era de esperar), devolverá un objeto DOM.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}
marcovtwout
fuente
4
Devuelve falso en la última versión de JQuery.
hoyhoy
1
¿Cómo haría esta prueba para todos y cada uno de los diálogos? Supongamos que tiene diez cuadros de diálogo diferentes con opciones y opciones independientes y desea probar si ALGUNO de ellos está abierto, no un selector específico.
Kirk Ross
2
¿Quizás crear una función como $ (". Ui-dialog"). Each (function (/ * comprobar este diálogo * /))?
marcovtwout
21

Si desea verificar si el cuadro de diálogo está abierto en un elemento en particular, puede hacer esto:

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

O si solo desea verificar si el elemento en sí es visible, puede hacer:

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

O...

if ($('#elem:visible').length) { 
  // do something
}
Nick Craver
fuente
3
Verifico mi div si no se inicializó así:$dialog.hasClass('ui-dialog-content')
Sergey
Gracias, no pude obtener las respuestas anteriores usando "isOpen" para trabajar para mí, pero esto funcionó.
Kyle Challis
1

El comentario de Nick Craver es el más sencillo para evitar el error que se produce si aún no se ha definido el diálogo:

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

Sin embargo, primero debe configurar la visibilidad en su CSS, usando simplemente:

#elem { display: none; }
usuario2452922
fuente