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?

Respostas:


173

Se você ler os documentos.

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

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


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
}

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
}

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; }
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.