Wykryj, czy okno dialogowe interfejsu użytkownika jQuery jest otwarte

97

Używam okna dialogowego interfejsu użytkownika jQuery. Jeśli jest otwarta, chcę zrobić jedną rzecz. Jeśli jest zamknięty, chcę zrobić inny.

Moje pytanie brzmi: jak mogę wykryć, czy okno dialogowe interfejsu użytkownika jQuery jest otwarte, czy nie?

user208662
źródło

Odpowiedzi:

173

Jeśli przeczytasz dokumentację.

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

Ta metoda zwraca wartość logiczną (prawda lub fałsz), a nie obiekt jQuery.

Byron Whitlock
źródło
1
No! Nie wiem, jak to przeoczyłem. Dziękuję Ci.
user208662
1
Jak wykonałbyś ten test dla wszystkich dialogów? Załóżmy, że masz dziesięć różnych okien dialogowych z oddzielnymi initami i opcjami i chcesz sprawdzić, czy JAKIEKOLWIEK z nich jest otwarte, a nie konkretny selektor?
Kirk Ross,
Dodaj klasę do wspomnianych okien dialogowych, a następnie zmień selektor w polu wyboru isOpen.
Suipaste
1
plus także: dziesięć dialogów? być może ograniczenie tego przez ponowne użycie jednej lub dwóch instancji to myśl warta rozważenia
David,
1
Sprawdź również, czy dialog został zainicjowany z $("#mydialog").hasClass("ui-dialog-content"). Zobacz stackoverflow.com/questions/29528706/…
Autumn Leonard
53

Właściwie musisz wyraźnie porównać to z prawdą. Jeśli okno dialogowe jeszcze nie istnieje, nie zwróci false (jak można by się spodziewać), zwróci obiekt DOM.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}
marcovtwout
źródło
4
Zwraca wartość false w najnowszym JQuery.
hoyhoy
1
Jak wykonałbyś ten test dla wszystkich dialogów? Załóżmy, że masz dziesięć różnych okien dialogowych z oddzielnymi initami i opcjami i chcesz sprawdzić, czy JAKIEKOLWIEK z nich jest otwarte, a nie konkretny selektor?
Kirk Ross,
2
Może utworzyć funkcję taką jak $ (". Ui-dialog"). Each (function (/ * sprawdź to okno dialogowe * /))?
marcovtwout
21

Jeśli chcesz sprawdzić, czy okno dialogowe jest otwarte na określonym elemencie, możesz to zrobić:

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

Lub jeśli chcesz po prostu sprawdzić, czy sam element jest widoczny, możesz zrobić:

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

Lub...

if ($('#elem:visible').length) { 
  // do something
}
Nick Craver
źródło
3
Sprawdzam mój div, jeśli nie został zainicjowany w ten sposób:$dialog.hasClass('ui-dialog-content')
Sergey
Dzięki, nie udało mi się uzyskać powyższych odpowiedzi przy użyciu „isOpen” do pracy, ale to zadziałało.
Kyle Challis
1

Komentarz Nicka Cravera jest najprostszym sposobem uniknięcia błędu, który pojawia się, jeśli okno dialogowe nie zostało jeszcze zdefiniowane:

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

Najpierw jednak powinieneś ustawić widoczność w swoim CSS, używając po prostu:

#elem { display: none; }
user2452922
źródło