Визначте, чи відкрито діалогове вікно інтерфейсу jQuery


97

Я використовую діалогове вікно інтерфейсу jQuery. Якщо він відкритий, я хочу зробити одне. Якщо він закритий, я хочу зробити інше.

Моє запитання полягає в тому, як я можу виявити, відкрите чи ні діалогове вікно інтерфейсу jQuery?

Відповіді:


173

Якщо ви читаєте документи.

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

Цей метод повертає булевий (істинний або хибний), а не jQuery об'єкт.


1
До! Я не знаю, як я це не помітив. Дякую.
користувач208662

1
Як би ви зробили цей тест для будь-якого діалогу? Скажімо, у вас є десять різних діалогів з окремими вкладишами та параметрами, і ви хочете перевірити, чи будь-який з них відкритий, а не конкретний селектор?
Кірк Росс

Додайте клас до згаданих діалогових вікон, а потім змініть селектор у вашому чеку isOpen.
Suipaste

1
плюс також: десять діалогів? можливо, зменшити це за допомогою повторного використання екземпляра або двох - це думка, яку варто задуматися
Девід,

1
Також перевірте, чи діалог навіть ініціалізовано $("#mydialog").hasClass("ui-dialog-content"). Дивіться stackoverflow.com/questions/29528706/…
Осінній Леонард

53

Власне, ви повинні явно порівнювати це з істинним. Якщо діалогове вікно ще не існує, воно не поверне помилкове (як ви очікували), воно поверне об’єкт DOM.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}

4
Повертає помилку в останньому JQuery.
hoyhoy

1
Як би ви зробили цей тест для будь-якого діалогу? Скажімо, у вас є десять різних діалогів з окремими вкладишами та параметрами, і ви хочете перевірити, чи будь-який з них відкритий, а не конкретний селектор?
Кірк Росс

2
Може створити таку функцію, як $ (". Ui-dialog"). Кожна (функція (/ * перевірити це діалогове вікно * /))?
marcovtwout

21

Якщо ви хочете перевірити, чи відкрито діалогове вікно для певного елемента, ви можете це зробити:

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

Або якщо ви просто хочете перевірити, чи видно сам елемент, ви можете зробити:

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

Або ...

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

3
Я перевіряю свою діву, чи вона не ініціалізована так:$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.