okno dialogowe jQuery UI-nie otwiera się po zamknięciu

Mam problem z jquery-ui dialog box.

Problem polega na tym, że gdy zamykam okno dialogowe, a następnie klikam link, który go wyzwala, nie wyskakuje ponownie, chyba że odświeżę stronę.

Jak mogę przywrócić okno dialogowe bez odświeżania rzeczywistej strony.

Poniżej mój kod:

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

Dzięki

Author: Rahul Gupta, 2008-12-14

12 answers

Powinieneś użyć $("#terms").dialog({ autoOpen: false });, aby go zainicjować. Następnie możesz użyć $('#terms').dialog('open');, aby otworzyć okno dialogowe i $('#terms').dialog('close');, aby je zamknąć.

 110
Author: Shane Fulmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-13 22:43:16

Cześć chłopaki udało mi się to rozwiązać.

Użyłem destroy zamiast close function (to nie ma sensu), ale zadziałało!

$(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' });
});
 14
Author: David Bonnici,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-14 07:58:05

W ostatniej linii nie używaj $(this).remove() zamiast tego używaj $(this).hide().

EDIT: aby wyjaśnić, w przypadku close click usuwasz #terms div z DOM, dlatego nie wraca. Musisz to tylko ukryć.

 11
Author: Darko Z,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-12-14 19:37:11

Wierzę, że można zainicjować okno tylko jeden raz. Powyższy przykład próbuje zainicjować okno dialogowe za każdym razem, gdy klikniesz #terms. Spowoduje to problemy. Zamiast tego inicjalizacja powinna nastąpić poza zdarzeniem kliknięcia. Twój przykład powinien wyglądać mniej więcej tak:

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

Myślę, że gdy już to wyjaśnisz, powinno to rozwiązać problem "otwórz z linku", który opisałeś.

 9
Author: 26design,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-27 23:40:29

Dla mnie takie podejście działa:

Okno dialogowe można zamknąć, klikając X w oknie dialogowym lub klikając "Bewaren". Dodaję (dowolny) id, ponieważ muszę mieć pewność, że każdy bit html dodany do dom zostanie później usunięty.

$('<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
Author: Zilverdistel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-06 11:50:51
 <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
Author: Joanna Avalos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-07 11:22:40

To jest super Stary wątek, ale ponieważ odpowiedź mówi nawet "to nie ma sensu", pomyślałem, że dodam odpowiedź...

Oryginalny post używał $(this).remove (); W close handler, to faktycznie usunie okno dialogowe div z DOM. Próba ponownego zainicjowania okna dialogowego nie powiodła się, ponieważ div został usunięty.

Using $(this).dialog ('destroy') wywołuje metodę destroy zdefiniowaną w obiekcie dialog, która nie usuwa jej z drzewa DOM.

Od dokumentacja:

Destroy ()

Całkowicie usuwa funkcjonalność okna dialogowego. Spowoduje to powrót elementu do stanu > > pre-init. Ta metoda nie akceptuje żadnych argumentów.

To powiedziane, tylko zniszczyć lub usunąć z bliska, jeśli masz ku temu dobry powód.

 3
Author: crad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 16:57:42
$(this).dialog('destroy');
Działa!
 2
Author: Benedikt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-13 22:29:53

.close() to metoda ogólna i może być używana w odniesieniu do większej liczby obiektów. .okno dialogowe('Zamknij') może być używane tylko z oknami dialogowymi

 1
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-28 14:50:52

Używam okna dialogowego jako przeglądarki plików dialogowych i uploader następnie przepisuję kod w ten sposób

var dialog1 = $("#dialog").dialog({ 
              autoOpen: false, 
              height: 480, 
              width: 640 
}); 
$('#tikla').click(function() {  
    dialog1.load('./browser.php').dialog('open');
});   
Wszystko wydaje się działać świetnie.
 1
Author: edib,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-27 13:42:23

Miałem ten sam problem z jQuery-UI overlay okno dialogowe-to działa tylko raz, a następnie zatrzymać, chyba że przeładować stronę. Odpowiedź znalazłem w jednym z ich przykładów -
Wiele nakładek na tej samej stronie
flowplayer_tools_multiple_open_close
- kto by to zrobił, prawda?? :-) -

Ważnym ustawieniem okazało się

oneInstance: false

Więc teraz mam to tak -

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

  }

}

And everything works just fine

Mam nadzieję, że to pomoże somebody

O.

 1
Author: Oleg Ivanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-10 06:59:50

Dokumentacja jQuery ma link do tego artykułu 'Podstawowe użycie okna jQuery UI' to wyjaśnia tę sytuację i jak ją rozwiązać.

 0
Author: Barka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-10 06:32:42