닫을 때 대화 상자를 완전히 제거하는 방법


133

아약스 작업이 실패하면 오류가있는 새 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에서 완전히 제거됩니까? 아니면 어떻게 든 파괴 기능을 먼저 호출해야합니까?

답변:


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

이것은 대화 상자를 파괴 한 다음 DOM에서 대화 상자를 "호스팅"했던 div를 제거합니다.


3
FF와 Firebug가 열린 상태에서 이것을 사용하여 조심하십시오. 충돌합니다. code.google.com/p/fbug/issues/detail?id=6290 코드에 어떤 문제가 있는지 파악하기 위해 몇 시간을 보냈습니다 ...
Hendry H.

5
동적으로 생성되지 않은 DOM의 div를 사용하는 경우을 사용하십시오 .empty(). 그런 다음 내용물을 다시 채우면 재사용 할 수 있습니다.
KoalaBear

2
@HendryH.는 더 이상 Firefox 23.0 및 Firebug 1.11.4에서 문제가되지 않습니다.
CJM

2
destroy필요? 요소를 제거해도 대화 상자가 손상되지 않습니까?
Druska


10

왜 제거 하시겠습니까?

여러 인스턴스가 생성되는 것을 방지하려면 다음 방법을 사용하십시오.

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

그리고 오류가 발생하면 다음을 수행하십시오.

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

나는 그것이 아약스 호출에서 돌아 오는 것에 따라 다른 내용을 포함하기 때문에 더 쉬울 것이라고 생각했다. 또한 div는 예제에서 보여준 것처럼 정적이지 않지만 github.com/nje/jquery-tmpl 플러그인에 의해 렌더링됩니다 . 대화 상자의 내용을 바꾸는 좋은 방법이 있다면 나는 그것을보고 관심이있을 것입니다 :)
Svish

예를 들어, 대화 상자 div를 사용하여 문자열을 덤프하는 매우 간단한 옵션을 사용했습니다. $ ( '# myDialog'). html ( "Ooops."); 대화 상자 div에서 하위 컨트롤의 내용을 변경하도록 이것을 수정할 수 있습니다.
Fiona-myaccessible.website

모든 dialogOptions를 특별히 재정의하지 않는 한 #myDialog에 남아 있으므로이 방법은 좋은 방법이 아닙니다. 두 번째 대화 상자는 첫 번째 대화 상자와 동일한 단추, 높이 등을 가져서는 안됩니다.
Michiel Cornille

8
$(dialogElement).empty();

$(dialogElement).remove();

이것은 진짜로 수정


3

이것은 나를 위해 일했다

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

건배!

추신 : 나는 다소 비슷한 문제가 있었고 위의 접근 방식으로 해결했습니다.


2
close 콜백 내에서 close 메소드를 호출하고 있습니다! jQuery UI는 이것에 의해 제안 된 무한 루프를 방지하기에 충분히 똑똑하지만 여전히 중복되며 우아하지는 않습니다.
Elezar

답을 쓰지 $(this).dialog("close");않을 때 대화 상자가 사라지지 않았습니다. 때때로 jQuery는 매우 이상합니다.
deb_

2

나를 위해 매력처럼 작동하는 못생긴 솔루션 :

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

4
전혀 이상한 일입니다. 당신은 대화 상자를 열고 즉시 제거 ...
Dementic


0

모든 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');  
    });
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.