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?

Antworten:


173

Wenn Sie die Dokumente lesen .

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

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


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
}

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
}

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; }
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.