Определить, открыто ли диалоговое окно jQuery UI

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

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


person user208662    schedule 22.07.2010    source источник


Ответы (5)


Если вы читали документы.

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

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

person Byron Whitlock    schedule 22.07.2010
comment
Дох! Я не знаю, как я проглядел это. Спасибо. - person user208662; 23.07.2010
comment
Как бы вы провели этот тест для всех диалогов? Скажем, у вас есть десять разных диалогов с отдельными инициализациями и параметрами, и вы хотите проверить, открыты ли ЛЮБОЙ из них, а не конкретный селектор? - person Kirk Ross; 13.11.2014
comment
Добавьте класс в указанные диалоги, затем измените селектор на проверке isOpen. - person Suipaste; 19.08.2015
comment
плюс еще: десять диалогов? возможно, уменьшить это за счет повторного использования экземпляра или двух - это мысль, которую стоит рассмотреть - person David; 07.04.2016
comment
Спасибо, что вызвали явное сравнение! - person useSticks; 15.03.2017
comment
Я читаю google и stackoverflow, я не читаю документы. Спасибо за результат. - person Nicolas Thery; 20.09.2017
comment
Также проверьте, был ли диалог инициализирован с помощью $("#mydialog").hasClass("ui-dialog-content"). См. stackoverflow.com/questions/29528706/ - person Autumn Leonard; 29.11.2017
comment
он возвращает объект - person Michel; 15.10.2018

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

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}
person marcovtwout    schedule 18.11.2011
comment
Возвращает false в последней версии JQuery. - person hoyhoy; 21.04.2012
comment
Как бы вы провели этот тест для всех диалогов? Скажем, у вас есть десять разных диалогов с отдельными инициализациями и параметрами, и вы хотите проверить, открыты ли ЛЮБОЙ из них, а не конкретный селектор? - person Kirk Ross; 13.11.2014
comment
Может быть, создать функцию вроде $(.ui-dialog).each(function(/*check this dialog*/))? - person marcovtwout; 13.11.2014

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

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

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

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

Or...

if ($('#elem:visible').length) { 
  // do something
}
person Nick Craver    schedule 22.07.2010
comment
Я проверяю свой div, если он не инициализирован так: $dialog.hasClass('ui-dialog-content') - person Sergey; 02.06.2015
comment
Спасибо, я не смог получить приведенные выше ответы, используя isOpen для меня, но это сработало. - person Kyle Challis; 15.01.2016

Диалоговое окно jQuery имеет свойство isOpen, которое можно использовать для проверки того, открыто ли диалоговое окно jQuery.

Вы можете увидеть пример по этой ссылке: http://www.codegateway.com/2012/02/detect-if-jquery-dialog-box-is-open.html

person Avinash    schedule 26.02.2012

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

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

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

#elem { display: none; }
person user2452922    schedule 29.12.2017