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?

Odpowiedzi:


173

Jeśli przeczytasz dokumentację.

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

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


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
}

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
}

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; }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.