Определить, открыто ли диалоговое окно пользовательского интерфейса jQuery

97

Я использую диалоговое окно пользовательского интерфейса jQuery. Если он открыт, я хочу сделать одно. Если он закрыт, я хочу заняться другим.

Мой вопрос: как определить, открыто ли диалоговое окно пользовательского интерфейса jQuery?

user208662
источник

Ответы:

173

Если вы читаете docs.

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

Этот метод возвращает логическое значение (true или false), а не объект jQuery.

Байрон Уитлок
источник
1
Дох! Не знаю, как я это проглядел. Спасибо.
user208662
1
Как бы вы провели этот тест для любых диалогов? Скажем, у вас есть десять разных диалогов с отдельными инициативами и параметрами, и вы хотите проверить, открыто ли ЛЮБОЙ из них, а не конкретный селектор?
Кирк Росс,
Добавьте класс в указанные диалоги, затем измените селектор в проверке isOpen.
Suipaste
1
плюс еще: десять диалогов? Возможно, стоит подумать о сокращении этого количества повторным использованием одного или двух экземпляров,
Дэвид
1
Также проверьте, был ли диалог инициализирован с помощью $("#mydialog").hasClass("ui-dialog-content"). См. Stackoverflow.com/questions/29528706/…
Осенний Леонард
53

Фактически, вы должны явно сравнить это с истиной. Если диалог еще не существует, он не вернет false (как и следовало ожидать), он вернет объект DOM.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}
Marcovtwout
источник
4
Возвращает false в последнем JQuery.
hoyhoy
1
Как бы вы провели этот тест для любых диалогов? Скажем, у вас есть десять разных диалогов с отдельными инициативами и параметрами, и вы хотите проверить, открыто ли ЛЮБОЙ из них, а не конкретный селектор?
Кирк Росс,
2
Может быть, создать функцию типа $ (". Ui-dialog"). Each (function (/ * проверить этот диалог * /))?
marcovtwout
21

Если вы хотите проверить, открывается ли диалог для определенного элемента, вы можете сделать это:

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

Или, если вы просто хотите проверить, виден ли сам элемент, вы можете сделать:

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

Или...

if ($('#elem:visible').length) { 
  // do something
}
Ник Крейвер
источник
3
Проверяю свой div, не инициализирован ли он вот так:$dialog.hasClass('ui-dialog-content')
Сергей
Спасибо, я не смог получить ответы на эти вопросы, используя isOpen, но это сработало.
Кайл Чаллис
1

Комментарий Ника Крейвера - самый простой способ избежать ошибки, которая возникает, если диалог еще не определен:

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

Вы должны сначала установить видимость в своем CSS, просто используя:

#elem { display: none; }
user2452922
источник