2013-07-12 31 views
2

在升級到最新的jQuery庫之前,我使用這段代碼來關閉任何打開的對話框。現在這段代碼只是拋出一個錯誤。如何關閉所有打開的JQuery對話框

$(".dialogs:ui-dialog").each(function() { 

      if ($(this).data('dialog').isOpen()) { 
       $(this).dialog('close'); 
      }; 
}); 

我需要做到的是,當一個jQuery對話框打開,用戶點擊菜單項打開另一個對話框,我需要確保新一打開之前所有其它對話框關閉。

什麼是用於完成此任務的新代碼?

+0

爲什麼你不能直接使用'$(「.dialogs」).dialog(「close」);'?如果對話框沒有打開,我想關閉不會做任何事情。 –

+0

我無法想象這些代碼用於工作(我不認爲這就是API暴露的「isOpen」)。看起來你應該使用它的方式是:'$(「.selector」).dialog(「isOpen」)' – Ian

+0

@ClaudioRedi我同意 - 但我想知道是否仍然觸發每個元素的close事件(open或者不會),這可能會影響其他東西 – Ian

回答

3

你可以簡單地使用

$(".dialogs").dialog("close"); 

如果檢查dialog source code你會看到,關閉一個已經關閉對話框沒有任何效果,所以如果你願意,你可以放心地使用它

close: function(event) { 
    var that = this; 

    if (!this._isOpen || this._trigger("beforeClose", event) === false) { 
     return; 
    } 
    ... 
} 

保持你的邏輯類似於你有什麼原因,你可以使用這個

$(".dialogs").each(function() { 
    var $dialog = $(this); 
    if ($dialog.dialog('isOpen')) { 
     $dialog.dialog('close'); 
    }; 
}); 
+0

Ahh很好地發現已經關閉的對話是否觸發了他們的'close'事件:) – Ian

+0

@Claudio Redi,非常感謝! –

+0

我得到一個錯誤'$(...)。對話框不是一個函數'這會關閉對話框,但留下黑暗的背景。 –

相關問題