2009-07-20 69 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

相關問題