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


97

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

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

Ответы:


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
}

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; }
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.