programing

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

codeshow 2023. 9. 19. 21:31
반응형

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

에 문제가 있습니다.

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

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

아래는 제 코드입니다.

$(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(); },
    }); 
});

감사해요.

당신은 사실 당신이 사용해야 할 것입니다.$("#terms").dialog({ autoOpen: false });초기화를 하기 위해서요.그러면 사용할 수 있습니다.$('#terms').dialog('open');대화상자를 열고,$('#terms').dialog('close');문을 닫으려고요.

해결했습니다.

대신 destrough 기능을 사용했지만(말이 안 됩니다) 효과가 있었습니다.

$(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' });
});

마지막 줄에서, 사용하지 마세요.$(this).remove()사용하다$(this).hide()대신.

EDIT: 명확하게 설명하자면, 클릭 닫기 이벤트에서 다음을 제거합니다.#termsDOM의 디브가 돌아오지 않는 이유입니다.대신 숨겨주시면 됩니다.

대화상자는 한 번만 초기화할 수 있다고 생각합니다.위의 예는 #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' });
});

저는 당신이 그것을 정리하면, 당신이 설명한 '링크로부터의 개방' 문제가 해결될 것이라고 생각합니다.

이러한 접근 방식은 다음과 같습니다.

대화상자에서 X를 클릭하거나 'Be wareen'을 클릭하여 대화상자를 닫을 수 있습니다.돔에 추가된 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();
               }
});
 <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>

엄청 오래된 실인데 '말도 안 돼'라는 대답까지 나오니 답을 덧붙이려고 했는데...

원래 게시물은 $(이것)을 사용했습니다.remove(); close handler에서는 실제로 DOM에서 대화 div가 제거됩니다.대화 상자가 제거되었기 때문에 대화 상자를 다시 초기화하려고 시도해도 작동하지 않습니다.

$(이것)을 사용합니다.dialog('destroy')는 DOM에서 메서드를 제거하지 않는 대화 개체에 정의된 메서드 파괴를 호출합니다.

설명서에서:

파괴하다, 멸하다, 멸하다, 멸하다, 멸하다, 멸하다

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

그럴만한 이유가 있는 경우에만 파괴하거나 가까이에서 제거해야 합니다.

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

효과가 있습니다!

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

대화상자를 대화파일 브라우저와 업로더로 사용한 다음 코드를 이렇게 다시 씁니다.

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

모든 게 잘 되는 것 같습니다.

jquery-ui overlay 대화 상자에 대해서도 같은 문제가 있었습니다. 페이지를 다시 로드하지 않으면 한 번만 작동하고 이후에는 중지됩니다.예 중 다에서 .
에 여러 개의
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);
        }
    });

  }

}

그리고 모든 것이 정상적으로 작동합니다.

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

o.

jQuery 문서에는 이 상황과 해결 방법을 설명하는 기사 'jQuery UI 대화상자의 기본 사용'에 대한 링크가 있습니다.

언급URL : https://stackoverflow.com/questions/366854/jquery-ui-dialog-box-does-not-open-after-being-closed

반응형