Detectar se uma caixa de diálogo jQuery UI está aberta

97

Estou usando uma caixa de diálogo jQuery UI. Se estiver aberto, quero fazer uma coisa. Se estiver fechado, quero fazer outro.

Minha pergunta é: como faço para detectar se uma caixa de diálogo jQuery UI está aberta ou não?

user208662
fonte

Respostas:

173

Se você ler os documentos.

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

Este método retorna um booleano (verdadeiro ou falso), não um objeto jQuery.

Byron Whitlock
fonte
1
Doh! Eu não sei como eu esqueci isso. Obrigado.
user208662
1
Como você faria este teste para todos e quaisquer diálogos? Digamos que você tenha dez diálogos diferentes com inits e opções separadas e deseja testar se ALGUM deles está aberto, não um seletor específico.
Kirk Ross
Adicione uma classe a essas caixas de diálogo e, em seguida, altere o seletor na verificação isOpen.
Suipaste
1
mais também: dez diálogos? talvez reduzir isso reutilizando uma ou duas instâncias seja um pensamento que vale a pena considerar
David,
1
Verifique também se o diálogo foi inicializado com $("#mydialog").hasClass("ui-dialog-content"). Consulte stackoverflow.com/questions/29528706/…
Autumn Leonard
53

Na verdade, você deve compará-lo explicitamente com o verdadeiro. Se a caixa de diálogo ainda não existir, ela não retornará falso (como você esperaria), ela retornará um objeto DOM.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}
Marcovtwout
fonte
4
Retorna falso no JQuery mais recente.
hoyhoy
1
Como você faria este teste para todos e quaisquer diálogos? Digamos que você tenha dez diálogos diferentes com inits e opções separadas e deseja testar se ALGUM deles está aberto, não um seletor específico.
Kirk Ross
2
Talvez crie uma função como $ (". Ui-dialog"). Each (function (/ * verifique esta caixa de diálogo * /))?
marcovtwout
21

Se você deseja verificar se a caixa de diálogo está aberta em um elemento específico, você pode fazer o seguinte:

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

Ou se você apenas deseja verificar se o próprio elemento está visível, você pode fazer:

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

Ou...

if ($('#elem:visible').length) { 
  // do something
}
Nick Craver
fonte
3
Eu verifico meu div se ele não inicializou assim:$dialog.hasClass('ui-dialog-content')
Sergey
Obrigado, não consegui obter as respostas acima usando "isOpen" para funcionar para mim, mas funcionou.
Kyle Challis de
1

O comentário de Nick Craver é o mais simples para evitar o erro que ocorre se a caixa de diálogo ainda não foi definida:

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

Você deve definir a visibilidade em seu CSS primeiro, usando simplesmente:

#elem { display: none; }
user2452922
fonte