Ermitteln Sie, ob ein Dialogfeld für die jQuery-Benutzeroberfläche geöffnet ist

97

Ich verwende ein jQuery-UI-Dialogfeld. Wenn es offen ist, möchte ich eine Sache tun. Wenn es geschlossen ist, möchte ich ein anderes machen.

Meine Frage ist, wie erkenne ich, ob ein Dialogfeld für die jQuery-Benutzeroberfläche geöffnet ist oder nicht?

user208662
quelle

Antworten:

173

Wenn Sie die Dokumente lesen .

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

Diese Methode gibt einen Booleschen Wert (true oder false) zurück, kein jQuery-Objekt.

Byron Whitlock
quelle
1
Doh! Ich weiß nicht, wie ich das übersehen habe. Danke dir.
user208662
1
Wie würden Sie diesen Test für alle Dialoge durchführen? Angenommen, Sie haben zehn verschiedene Dialoge mit separaten Einstellungen und Optionen und möchten testen, ob einer von ihnen geöffnet ist, kein bestimmter Selektor?
Kirk Ross
Fügen Sie diesen Dialogen eine Klasse hinzu und ändern Sie dann den Selektor in Ihrer isOpen-Prüfung.
Suipaste
1
plus auch: zehn dialogs? Vielleicht ist es ein
David,
1
Überprüfen Sie auch, ob der Dialog überhaupt mit initialisiert wurde $("#mydialog").hasClass("ui-dialog-content"). Siehe stackoverflow.com/questions/29528706/…
Herbst Leonard
53

Eigentlich muss man es explizit mit true vergleichen. Wenn der Dialog noch nicht vorhanden ist, wird nicht false zurückgegeben (wie erwartet), sondern ein DOM-Objekt.

if ($('#mydialog').dialog('isOpen') === true) {
    // true
} else {
    // false
}
marcovtwout
quelle
4
Gibt in der neuesten JQuery false zurück.
Hoyhoy
1
Wie würden Sie diesen Test für alle Dialoge durchführen? Angenommen, Sie haben zehn verschiedene Dialoge mit separaten Einstellungen und Optionen und möchten testen, ob einer von ihnen geöffnet ist, kein bestimmter Selektor?
Kirk Ross
2
Erstellen Sie möglicherweise eine Funktion wie $ (". UI-dialog"). Each (function (/ * check this dialog * /))?
Marcovtwout
21

Wenn Sie überprüfen möchten, ob der Dialog für ein bestimmtes Element geöffnet ist, können Sie Folgendes tun:

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

Oder wenn Sie nur überprüfen möchten, ob das Element selbst sichtbar ist, können Sie Folgendes tun:

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

Oder...

if ($('#elem:visible').length) { 
  // do something
}
Nick Craver
quelle
3
Ich überprüfe mein Div, wenn es nicht so initialisiert wurde:$dialog.hasClass('ui-dialog-content')
Sergey
Danke, ich konnte die obigen Antworten mit "isOpen" nicht für mich bekommen, aber das hat funktioniert.
Kyle Challis
1

Der Kommentar von Nick Craver ist der einfachste, um den Fehler zu vermeiden, der auftritt, wenn der Dialog noch nicht definiert wurde:

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

Sie sollten jedoch zuerst die Sichtbarkeit in Ihrem CSS festlegen, indem Sie einfach Folgendes verwenden:

#elem { display: none; }
user2452922
quelle