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?

Respuestas:


173

Si lees el docs.

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

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


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
}

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
}

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; }
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.