Диалоговое окно jQuery UI - не открывается после закрытия - PullRequest
79 голосов
/ 14 декабря 2008

У меня проблема с 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(); },
    }); 
});

Спасибо

Ответы [ 12 ]

110 голосов
/ 14 апреля 2009

Вы должны использовать $("#terms").dialog({ autoOpen: false }); для инициализации. Затем вы можете использовать $('#terms').dialog('open');, чтобы открыть диалоговое окно, и $('#terms').dialog('close');, чтобы закрыть его.

14 голосов
/ 14 декабря 2008

Привет, ребята, мне удалось решить.

Я использовал функцию уничтожения вместо закрытия (это не имеет никакого смысла), но это сработало!

$(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' });
});
12 голосов
/ 14 декабря 2008

в последней строке, не используйте $(this).remove(), используйте $(this).hide() вместо.

РЕДАКТИРОВАТЬ: Чтобы уточнить, при событии закрытия клика вы удаляете div #terms из DOM, поэтому он не возвращается. Вам просто нужно это скрыть.

9 голосов
/ 28 октября 2009

Полагаю, вы можете инициализировать диалог только один раз. Приведенный выше пример пытается инициализировать диалог каждый раз, когда нажимается #terms. Это вызовет проблемы. Вместо этого инициализация должна происходить вне события click. Ваш пример должен выглядеть примерно так:

$(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 голосов
/ 23 октября 2013

Это супер старая ветка, но поскольку в ответе даже сказано: "Это не имеет никакого смысла", я решил добавить ответ ...

Оригинальный пост использовал $ (this) .remove (); в обработчике закрытия это на самом деле удаляет диалоговый элемент div из DOM. Попытка инициализировать диалог снова не будет работать, потому что div был удален.

Использование $ (this) .dialog ('destroy') вызывает метод destroy, определенный в объекте диалога, который не удаляет его из DOM.

Из документации:

уничтожить ()

Полностью удаляет функциональность диалога. Это вернет элемент обратно в его состояние >> pre-init. Этот метод не принимает никаких аргументов.

Тем не менее, уничтожайте или удаляйте при закрытии, только если у вас есть на то веские основания.

3 голосов
/ 07 декабря 2012
 <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 голосов
/ 25 мая 2010

Для меня этот подход работает:

Диалог можно закрыть, щелкнув X в диалоговом окне или нажав «Осторожно». Я добавляю (произвольный) идентификатор, потому что мне нужно убедиться, что каждый бит html, добавленный в dom, впоследствии удаляется.

$('<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();
               }
});
2 голосов
/ 14 апреля 2009
$(this).dialog('destroy');

работает! * * 1002

1 голос
/ 06 июня 2011

У меня была та же проблема с диалоговым окном наложения 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);
        }
    });

  }

}

и все работает просто отлично

надеюсь, это кому-нибудь поможет

О.

1 голос
/ 27 сентября 2010

Я использую диалог как браузер и загрузчик файлов диалога, затем переписываю код следующим образом

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

все вроде отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...