如何在关闭时完全删除对话框

Svi*_*ish 130 jquery-ui jquery-ui-dialog

当ajax操作失败时,我创建一个带有错误的新div,然后将其显示为对话框.当对话框关闭时,我想彻底销毁并再次移除div.我怎样才能做到这一点?我的代码目前看起来像这样:

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

当我运行它时,对话框显示正确,但是当我关闭它时,对话框仍然在html中可见(使用FireBug).我在这里错过了什么?我忘记了什么?

更新:刚刚注意到我的代码在firebug控制台中给了我一个错误.

$(this).destroy不是函数

有人能帮帮我吗?

更新:如果我这样做$(this).remove(),该项目将从html中删除.但它是否完全从DOM中删除?或者我是否还需要首先调用destroy函数?

lom*_*axx 257

$(this).dialog('destroy').remove()
Run Code Online (Sandbox Code Playgroud)

这将破坏对话框,然后从DOM中删除完全"托管"对话框的div

  • 如果您使用DOM中的div,那么不动态创建,请使用`.empty()`.然后你可以重复使用它,如果你再次填充内容. (5认同)
  • 因为使用FF和Firebug打开了.它会崩溃.https://code.google.com/p/fbug/issues/detail?id=6290我花了好几个小时......来弄清楚我的代码有什么问题. (3认同)
  • 请参阅:http://stackoverflow.com/questions/9124389/jquery-ui-how-to-remove-dynamic-element-after-dialog-closes (3认同)
  • @HendryH.,Firefox 23.0和Firebug 1.11.4似乎不再是问题. (2认同)
  • "破坏"是必要的吗?不会删除元素也会破坏对话框吗? (2认同)

Fio*_*ite 10

你为什么要删除它?

如果要防止创建多个实例,那么只需使用以下方法......

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

当错误发生时,你会......

$('#myDialog').html("Ooops.");
$('#myDialog').dialog('open');
Run Code Online (Sandbox Code Playgroud)


小智 8

$(dialogElement).empty();

$(dialogElement).remove();
Run Code Online (Sandbox Code Playgroud)

这可以解决它真实的问题


deb*_*eb_ 5

这对我有用

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

干杯!

PS:我有一个有点类似的问题,上面的方法解决了它。

  • 您正在从 close 回调中调用 close 方法!jQuery UI 足够智能,可以防止由此建议的无限循环,但它仍然是多余的,我绝对不会认为它很优雅。 (3认同)