2010-07-22 13 views

Odpowiedz

156

Jeśli czytasz docs.

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

Ta metoda zwraca obiekt Boolean (true lub false), a nie jQuery.

+0

Doh! Nie wiem, jak to przeoczyłem. Dziękuję Ci. – user208662

+1

Jak zrobiłbyś ten test dla wszystkich okien dialogowych? Powiedzmy, że masz dziesięć różnych okien dialogowych z osobnymi elementami i opcjami i chcesz sprawdzić, czy DOWOLNE z nich są otwarte, a nie konkretny selektor? –

+0

Dodaj klasę do wspomnianych okien dialogowych, a następnie zmień selektor na czeku isOpen. – Suipaste

19

Jeśli chcesz sprawdzić, czy otworzyć okno w sprawie konkretnego elementu można to zrobić:

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

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

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

Albo ...

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

Sprawdzam mój div, jeśli nie został zainicjalizowany w ten sposób: '$ dialog.hasClass ('ui-dialog-conten t ') ' – Sergey

+0

Dzięki, nie mogłem uzyskać powyższych odpowiedzi za pomocą" isOpen "do pracy dla mnie, ale to zadziałało. –

47

W rzeczywistości należy jawnie porównać je do wartości true. Jeśli okno dialogowe jeszcze nie istnieje, to nie zwróci false (jak można się spodziewać), zwróci obiekt DOM.

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

Powoduje zwrócenie wartości false w najnowszym JQuery. – hoyhoy

+1

Jak zrobiłbyś ten test dla wszystkich okien dialogowych? Powiedzmy, że masz dziesięć różnych okien dialogowych z osobnymi elementami i opcjami i chcesz sprawdzić, czy DOWOLNE z nich są otwarte, a nie konkretny selektor? –

+2

Może utworzyć funkcję taką jak $ (".ui-dialog"). Each (function (/ * sprawdź to okno dialogowe * /))? – marcovtwout

0

Nick Craver jest najprostsza, aby uniknąć błędu, który występuje, jeśli okno nie zostało jeszcze zdefiniowane:

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

Należy ustawić widoczność najpierw w swoim CSS, używając po prostu:

#elem { display: none; } 
Powiązane problemy