Comment supprimer complètement une boîte de dialogue à la fermeture

Lorsqu'une opération ajax échoue, je crée un nouveau div avec les erreurs, puis je l'affiche comme une boîte de dialogue. Lorsque la boîte de dialogue est fermée, je voudrais détruire complètement et supprimer à nouveau la div. Comment puis-je faire cela? Mon code ressemble à ceci en ce moment:

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

Lorsque je l'exécute, la boîte de dialogue s'affiche correctement, mais lorsque je la ferme, la boîte de dialogue est toujours visible dans le code html (en utilisant FireBug). Ce qui me manque ici? Quelque chose que j'ai oublié?

Mise à jour: juste remarqué mon code me donne une erreur dans la console firebug.

$(ce).destroy n'est pas une fonction

Quelqu'un capable de m'aider?

Mise à jour: Si je fais juste $(this).remove() à la place, l'élément est supprimé du code html. Mais est-il complètement retiré du DOM? Ou dois-je en quelque sorte appeler cette fonction de destruction en premier?

125
demandé sur Liam 2010-05-19 14:42:56

7 réponses

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

Cela détruira la boîte de dialogue, puis supprimera complètement le div qui "hébergeait" la boîte de dialogue du DOM

246
répondu lomaxx 2010-05-19 10:48:31

Pourquoi voulez-vous supprimer?

Si c'est pour empêcher la création de plusieurs instances, utilisez simplement l'approche suivante...

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

Et quand l'erreur se produit, vous feriez...

$('#myDialog').html("Ooops.");
$('#myDialog').dialog('open');
9
répondu Fiona - myaccessible.website 2012-12-18 17:06:43
$(dialogElement).empty();

$(dialogElement).remove();

Cela le corrige pour de vrai

8
répondu Ghost1 2013-10-23 13:34:26

Une solution laide qui fonctionne comme un charme pour moi:

$("#mydialog").dialog(
    open: function(){
        $('div.ui-widget-overlay').hide();
        $("div.ui-dialog").not(':first').remove();
}
});
2
répondu cesar 2012-11-15 14:19:55

Vous pouvez utiliser

$(dialogElement).empty();    
$(dialogElement).remove();
1
répondu user2994033 2013-12-27 15:24:30

Ceci est travaillé pour moi

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

Cheers!

PS: j'ai eu un problème quelque peu similaire et l'approche ci-dessus l'a résolu.

0
répondu deb_ 2016-12-13 12:42:48

J'utilise cette fonction dans tous mes projets js

Vous l'appelez: hideAndResetModals ("#IdModalDialog")

Vous définissez si:

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');  
    });
}
0
répondu Sterling Diaz 2018-08-14 16:07:18