jQuery UI 대화 상자-닫은 후 열리지 않음


79

에 문제가 있습니다 jquery-ui dialog box.

문제는 대화 상자를 닫은 다음이를 트리거하는 링크를 클릭하면 페이지를 새로 고치지 않으면 다시 팝업되지 않는다는 것입니다.

실제 페이지를 새로 고치지 않고 대화 상자를 다시 호출하려면 어떻게해야합니까?

아래는 내 코드입니다.

$(document).ready(function() {
    $('#showTerms').click(function()
    {
        $('#terms').css('display','inline');
        $('#terms').dialog({
            resizable: false,
            modal: true,
            width: 400,
            height: 450,
            overlay: { backgroundColor: "#000", opacity: 0.5 },
            buttons:{ "Close": function() { $(this).dialog("close"); } },
            close: function(ev, ui) { $(this).remove(); },
    }); 
});

감사

답변:


110

실제로 $("#terms").dialog({ autoOpen: false });초기화하는 데 사용해야 합니다. 그런 다음을 사용 $('#terms').dialog('open');하여 대화 상자를 열고 $('#terms').dialog('close');닫을 수 있습니다.


1
이것은 완벽하게 작동합니다. 여기서 jQuery UI 문서는 명확하지 않습니다. 그러나 dialog함수가 초기화, 표시 및 숨기기를위한 것이라는 생각 은 나를 위해 이것을 이해했습니다. 감사.
Steve Cooper

동적으로 변경 될 수있는 HTML에서이 대화 상자를로드하는 경우 작동하지 않는 이유는 매우 직관적이지 않습니다. 누구든지 이러한 상황에 일반적으로 적용 할 수있는 좋은 솔루션이 있습니까?
Milimetric

@Milimetric 항상 $ (this) .remove (); 이렇게하면 다시 호출 할 때 전체 대화 상자가 처음부터 완전히 다시 만들어집니다. 이 함수는 $ (this) .dialog ( "destroy");와는 다르게 작동합니다. 개체를 파괴하지 않고 대화 상자를 초기화 이전 상태로만 설정하기 때문입니다.
Jeff Noel

14

나는 그것을 해결했다.

나는 대신 닫기 기능을 사용했지만 (말이 안되는) 작동했습니다.

$(document).ready(function() {
$('#showTerms').click(function()
{
    $('#terms').css('display','inline');
    $('#terms').dialog({resizable: false,
        modal: true,
        width: 400,
        height: 450,
        overlay: { backgroundColor: "#000", opacity: 0.5 },
        buttons:{ "Close": function() { $(this).dialog('**destroy**'); } },
        close: function(ev, ui) { $(this).close(); },
    });         
});   
$('#form1 input#calendarTEST').datepicker({ dateFormat: 'MM d, yy' });
});

4
Destroy는 해당 메서드를 사용하면 작동하지만 close ()가 작동하도록하려면 먼저 대화 상자를 인스턴스화 한 다음 dialog.show ()를 사용하여 표시 한 다음 dialog.close ()를 사용하여 닫으면 문제없이 다시 열립니다. .
RaeLehman

6
거의. 먼저 초기화하는 것이 맞지만 그 후에는 .dialog ( "open") 및 .dialog ( "close")
rdworth

12

마지막 줄에, 사용하지 않는 $(this).remove()사용을 $(this).hide()대신.

편집 : 명확히하기 위해 닫기 클릭 이벤트 #terms에서 DOM 에서 div를 제거하고 있으므로 다시 돌아 오지 않습니다. 대신 숨길 필요가 있습니다.


9

대화를 한 번만 초기화 할 수 있다고 생각합니다. 위의 예는 #terms를 클릭 할 때마다 대화 상자를 초기화하려고합니다. 이로 인해 문제가 발생합니다. 대신 초기화는 클릭 이벤트 외부에서 발생해야합니다. 귀하의 예제는 다음과 같이 보일 것입니다.

$(document).ready(function() {
    // dialog init
    $('#terms').dialog({
        autoOpen: false,
        resizable: false,
        modal: true,
        width: 400,
        height: 450,
        overlay: { backgroundColor: "#000", opacity: 0.5 },
        buttons: { "Close": function() { $(this).dialog('close'); } },
        close: function(ev, ui) { $(this).close(); }
    });
    // click event
    $('#showTerms').click(function(){
        $('#terms').dialog('open').css('display','inline');      
    });
    // date picker
    $('#form1 input#calendarTEST').datepicker({ dateFormat: 'MM d, yy' });
});

이 문제를 해결하면 설명한 '링크에서 열기'문제가 해결되어야한다고 생각합니다.


3

나에게이 접근 방식은 다음과 같이 작동합니다.

대화 상자에서 X를 클릭하거나 '주의'를 클릭하여 대화 상자를 닫을 수 있습니다. dom에 추가 된 모든 html이 나중에 제거되었는지 확인해야하기 때문에 (임의) ID를 추가하고 있습니다.

$('<div id="dossier_edit_form_tmp_id">').html(data.form)
.data('dossier_id',dossier_id)
.dialog({
        title: 'Opdracht wijzigen',
        show: 'clip',
        hide: 'clip',
        minWidth: 520,
        width: 520,
        modal: true,
        buttons: { 'Bewaren': dossier_edit_form_opslaan },
        close: function(event, ui){ 
                                  $(this).dialog('destroy'); 
                                  $('#dossier_edit_form_tmp_id').remove();
               }
});

3
 <button onClick="abrirOpen()">Open Dialog</button>

<script type="text/javascript">
var $dialogo = $("<div></div>").html("Aqui tu contenido(here your content)").dialog({
       title: "Dialogo de UI",
       autoOpen: false,
       close: function(ev, ui){
               $(this).dialog("destroy");
       }
 function abrirOpen(){
       $dialogo.dialog("open");
 }
});

//**Esto funciona para mi... (this works for me)**
</script>

3

이것은 매우 오래된 스레드이지만 대답이 "말이 안 돼"라고 말하기 때문에 대답을 추가 할 것이라고 생각했습니다.

원래 게시물은 $ (this) .remove (); 닫기 핸들러에서 이것은 실제로 DOM에서 대화 상자 div를 제거합니다. div가 제거 되었기 때문에 대화 상자를 다시 초기화하려고하면 작동하지 않습니다.

$ (this) .dialog ( 'destroy') 사용은 DOM에서 제거하지 않는 대화 객체에 정의 된 destroy 메소드를 호출합니다.

문서에서 :

멸하다()

대화 상자 기능을 완전히 제거합니다. 그러면 요소가 >> pre-init 상태로 돌아갑니다. 이 메서드는 인수를 허용하지 않습니다.

즉, 정당한 이유가있는 경우에만 닫거나 제거하십시오.



1

.close ()는 일반적이며 더 많은 객체를 참조하는 데 사용할 수 있습니다. .dialog ( 'close')는 대화 상자에서만 사용할 수 있습니다.


1

대화 파일 브라우저 및 업 로더로 대화 상자를 사용하고 다음과 같은 코드를 다시 작성합니다.

var dialog1 = $("#dialog").dialog({ 
              autoOpen: false, 
              height: 480, 
              width: 640 
}); 
$('#tikla').click(function() {  
    dialog1.load('./browser.php').dialog('open');
});   

모든 것이 잘 작동하는 것 같습니다.


1

jquery-ui 오버레이 대화 상자에서 동일한 문제가 발생했습니다. 한 번만 작동 한 다음 페이지를 다시로드하지 않으면 중지됩니다. 나는 그들의 예 중 하나에서 답을 찾았습니다-
같은 페이지에 여러 오버레이
flowplayer_tools_multiple_open_close-
누가 그래도 그럴까요 ?? :-)-

중요한 설정은

oneInstance: false

그래서, 이제 이렇게 있어요-

$(document).ready(function() {

 var overlays = null;

 overlays = jQuery("a[rel]");

 for (var n = 0; n < overlays.length; n++) {

    $(overlays[n]).overlay({
        oneInstance: false, 
        mask: '#669966',
        effect: 'apple',
        onBeforeLoad: function() {
            overlay_before_load(this);
        }
    });

  }

}

그리고 모든 것이 잘 작동합니다.

이것이 누군가에게 도움이되기를 바랍니다.

영형.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.