Как полностью удалить диалог при закрытии - PullRequest
130 голосов
/ 19 мая 2010

Когда ajax-операция завершается неудачно, я создаю новый div с ошибками, а затем показываю его в виде диалога. Когда диалоговое окно закрыто, я хотел бы полностью уничтожить и снова удалить div. Как я могу это сделать? Мой код выглядит примерно так:

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

Когда я запускаю это, диалоговое окно отображается правильно, но когда я закрываю его, диалоговое окно все еще видно в html (используя FireBug). Что мне здесь не хватает? Что-то я забыл?

Обновление: Только что заметил, что мой код выдает ошибку в консоли Firebug.

$ (this) .destroy не является функцией

Кто-нибудь может мне помочь?

Обновление: Если вместо этого я просто $(this).remove(), элемент будет удален из HTML. Но полностью ли он удален из DOM? Или мне как-то нужно сначала вызвать эту функцию уничтожения?

Ответы [ 7 ]

257 голосов
/ 19 мая 2010
$(this).dialog('destroy').remove()

Это уничтожит диалог, а затем полностью удалит div, который «размещал» диалог из DOM

10 голосов
/ 19 мая 2010

Почему вы хотите удалить его?

Если это предотвращает создание нескольких экземпляров, просто используйте следующий подход ...

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

И когда произойдет ошибка, вы будете делать ...

$('#myDialog').html("Ooops.");
$('#myDialog').dialog('open');
8 голосов
/ 23 октября 2013
$(dialogElement).empty();

$(dialogElement).remove();

это исправляет это по-настоящему

3 голосов
/ 19 июня 2015

Это работает для меня

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

Ура! * * 1004

PS: У меня была несколько похожая проблема, и вышеупомянутый подход решил ее.

2 голосов
/ 15 ноября 2012

Уродливое решение, которое работает для меня как очарование:

$("#mydialog").dialog(
    open: function(){
        $('div.ui-widget-overlay').hide();
        $("div.ui-dialog").not(':first').remove();
}
});
1 голос
/ 15 ноября 2013

Вы можете использовать

$(dialogElement).empty();    
$(dialogElement).remove();
0 голосов
/ 14 августа 2018

Я использую эту функцию во всех моих проектах js

Вы называете это: hideAndResetModals ( "# IdModalDialog")

Вы определяете, если:

function hideAndResetModals(modalID)
{
    $(modalID).modal('hide');
    clearValidation(modalID); //You implement it if you need it. If not, you can remote this line
    $(modalID).on('hidden.bs.modal', function () 
    {
        $(modalID).find('form').trigger('reset');  
    });
}
...