2010-05-19 43 views
118

當ajax操作失敗時,我創建一個帶有錯誤的新div,然後將其顯示爲對話框。當對話框關閉時,我想徹底銷燬並刪除div。我怎樣才能做到這一點?我的代碼看起來像這樣的時刻:jquery:如何在關閉時完全刪除對話框

$('<div>We failed</div>') 
    .dialog(
    { 
     title: 'Error', 
     close: function(event, ui) 
     { 
      $(this).destroy().remove(); 
     } 
    }); 

當我運行這個對話框中顯示正確,但是當我關閉該對話框仍然在(使用螢火蟲)的HTML可見。我在這裏錯過了什麼?我忘記了什麼?

更新:只是注意到我的代碼給我在螢火蟲控制檯的錯誤。

$(本).destroy不是一個函數

任何人能幫助我嗎?

更新:如果我只是$(this).remove(),而不是從html中刪除項目。但它是否完全從DOM中刪除?或者,我是否也需要首先調用該銷燬函數?

回答

239
$(this).dialog('destroy').remove() 

這將破壞對話,然後你爲什麼要刪除它完全從DOM

+3

Oooooh。對... * facepalm *謝謝! – Svish 2010-05-19 10:49:27

+0

請注意,'.destroy'移除了UI框架(titlebar,closebutton,resizebar等)添加的外部標記。也許這就是你所指的_host_。 – 2013-05-06 09:14:48

+3

因FF和Firebug打開而使用這個。它會崩潰。 https://code.google.com/p/fbug/issues/detail?id=6290 我花了幾個小時......來弄清楚我的代碼有什麼問題。 – 2013-05-16 07:20:14

9

刪除了「託管」對話框中的div?

如果是爲了防止正在創建多個實例,那麼就用下面的辦法......

$('#myDialog') 
    .dialog( 
    { 
     title: 'Error', 
     close: function(event, ui) 
     { 
      $(this).dialog('close'); 
     } 
    }); 

而發生錯誤時,你會怎麼做?

$('#myDialog').html("Ooops."); 
$('#myDialog').dialog('open'); 
+0

我只是覺得它會更容易,因爲它會包含不同的內容,這取決於我從ajax調用返回的內容。而且div也不是像我在示例中顯示的那樣是靜態的,而是由http://github.com/nje/jquery-tmpl插件呈現的。如果你有一個很好的方式來交換對話框的內容,我會感興趣的是:) – Svish 2010-05-19 11:19:19

+0

那麼,在我的例子中,我使用了非常簡單的選項,只是用對話框div轉儲字符串:$( '#myDialog')的HTML(包括 「Ooops。」); 您可以修改它以更改對話框div中的任何子控件的內容。 – 2010-05-19 12:13:12

+0

這不是一個好方法,因爲除非您專門覆蓋它們,否則所有dialogOptions都將保留在#myDialog上。 第二個對話框不應該(總是)具有相同的按鈕,高度等。作爲第一個。 – 2016-05-18 14:12:20

2

的醜陋的解決方案,它就像一個魅力對我來說:

$("#mydialog").dialog(
    open: function(){ 
     $('div.ui-widget-overlay').hide(); 
     $("div.ui-dialog").not(':first').remove(); 
} 
}); 
+4

有點奇怪它的工作。你打開對話框,並立即刪除它... – Dementic 2013-02-05 12:27:18

8
$(dialogElement).empty(); 

$(dialogElement).remove(); 

這個修復它真正的

+0

適合我!謝謝! – MiBol 2017-01-11 16:16:32

1

你可以使用

$(dialogElement).empty();  
$(dialogElement).remove(); 
0

這對我來說

$('<div>We failed</div>') 
    .dialog(
    { 
     title: 'Error', 
     close: function(event, ui) 
     { 
      $(this).dialog("close"); 
      $(this).remove(); 
     } 
    }); 

乾杯工作!

PS:我有一個類似的問題,上面的方法解決了它。

+1

你在關閉回調中調用close方法! jQuery UI足夠聰明,可以防止由此提出的無限循環,但它仍然是多餘的,我絕對不會認爲它是優雅的。 – Elezar 2016-08-04 03:42:52

+0

在編寫答案時,如果沒有'$(this).dialog(「close」);',對話框將不會消失。有時候jQuery非常奇怪。 – 2016-08-26 08:26:24