2012-11-27 5 views
14

Wie kann ich alle geöffneten dialog Boxen in jQuery schließen? Die Situation ist die nächste: Ich habe eine einfache Seite ohne Dialoge. Es hat einige Knöpfe, die öffnen, es besitzt Dialoge.Schließen Sie alle geöffneten Dialogfelder? (JQuery)

Wenn ich auf eine Schaltfläche klicke, muss ich alle geöffneten Dialoge schließen. Hier

ist die HTML:

<div id="buttons"> 
    <a href="#" id="btn_1">Button 1</a> 
    <a href="#" id="btn_2">Button 2</a> 
    <a href="#" id="btn_3">Button 3</a> 
</div> 
<div id="dialog_1" class="dialogbox">...</div> 
<div id="dialog_2" class="dialogbox">...</div> 
<div id="dialog_3" class="dialogbox">...</div> 

Und hier ist die jQuery:

$(function() { 
    $('#buttons').find('a').click(function() { 
     // close all dialogs 
     $('.dialogbox').dialog("close"); 

     // find out clicked id and open dialog 
     var nr = this.id.split("_")[1]; 
     $('#dialog_'+nr).dialog(); 
    }); 
}); 

Die Chrome sagen: Uncaught Error: cannot call methods on dialog prior initialization; attempted to call method 'close'.

Ich wurde versucht, $('.dialogbox').dialog('isOpen') zu überprüfen, aber das gleiche Ergebnis.

Wie kann ich alle Dialoge schließen?

+1

Sie müssen zuerst Ihre Dialoge initialisieren, bevor diese Funktion jemals den Namen $() ready (function() {. $ ('dialogbox') dialog ({})}) –

Antwort

29

Da sie alle die gleiche Klasse erben, ist dies der beste Weg, um alle und in der Nähe wählen von:

$(".ui-dialog-content").dialog("close");

+1

sweeeeeeeeeeet! – sajanyamaha

+0

Vorsicht! Bei Dialogen im HTML, die noch nicht initialisiert wurden, kann dies zu einem Fehler führen. Eine funktionierende Lösung ist hier: http://stackoverflow.com/a/9060927/368896 –

1

Sie einfach versuchen, diese können, wie sie alle .ui-dialog-content Klasse haben, so wählen Sie durch das und schließen Sie sie, wie folgt aus: -.

$(".ui-dialog-content").dialog("close"); 
+0

Wie ist Ihre Antwort besser als die angenommene? –