2009-07-20 48 views
5

我正在运行需要关闭Dojo对话框的函数(如果它已加载)。如何检查dojo对话框是否正在运行?我是否使用纯JavaScript并通过ID检查它是否未定义?如何检查Dojo对话框是否已加载?

if (dijit.byId("blah") !== undefined) { 
    destroyRecursive dijit; 
} 

还是我喜欢使用对话框对象的属性:

isFocusable method 
isLoaded property 
+0

这是最终的功能: 功能bufferAddress(XCOORD,YCOORD){ 如果(dijit.byId( “selectLocationDlg”)==未定义!){ dijit.byId(“selectLocationDlg”)。destroyRecursive(); } //这里的其他一些代码 } – 2009-07-21 18:03:43

回答

4

Dialog provides two properties你可能要检查:isLoadedopen。通过挖掘代码,您可以找到以下说明:

  • open:如果Dialog当前显示在屏幕上,则为True。
  • isLoaded:真要是的contentPane中有数据,无论是初始化(通过HREF或内联内容)期间指定,或经由设置ATTR( '内容',...)/ ATTR( 'href' 属性,...)如果它没有任何内容,或者如果ContentPane仍处于下载href的过程中,则为False。

所以,你可以只:

var dialog = dijit.byId("blah"); 
if(dialog.open) { 
    dialog.destroy(); 
} 
+0

8年后,您应该使用if(dialog && dialog.open)或其他安全检查'dialog'exists('typeof(dialog)!='undefined' ','dialog!= null'等)。 – Daevin 2017-07-06 14:33:51

1

你想隐藏或销毁呢?

如果你只是想显示/隐藏它,你可以做到以下几点:

var dialog = dijit.byId('blah'); 
if (dialog) { 
    if (dialog.open) { 
    dialog.hide(); 
    } 
    else { 
    dialog.show(); 
    } 
} 

如果你想destory它以释放内存:

var dialog = dijit.byId('blah'); 
dialog.destory(); 

我觉得destroy是递归的,因为它称其父母destroy方法,其父母之一是dijit.layout.ContentPane