jquery-ui-dialog - Как подключиться к событию закрытия диалога

Я использую плагин jquery-ui-dialog

Я ищу способ обновить страницу, когда в некоторых случаях диалоговое окно закрыто.

Есть ли способ зафиксировать событие закрытия из диалогового окна?

Я знаю, что могу запустить код при нажатии кнопки закрытия, но это не касается закрытия пользователя с помощью escape или x в правом верхнем углу.


person Brownie    schedule 05.10.2008    source источник


Ответы (9)


Я нашел это!

Вы можете поймать событие закрытия, используя следующий код:

 $('div#popup_content').on('dialogclose', function(event) {
     alert('closed');
 });

Очевидно, я могу заменить предупреждение на все, что мне нужно сделать.
Изменить: Начиная с JQuery 1.7, bind () стал on ()

person Brownie    schedule 05.10.2008
comment
опечатка: $ ('div # popup_content'). bind ('dialogclose', function (event)) {...} - person CFNinja; 26.03.2010
comment
Это полезно, но правильно ли $('div#popup_content')? Чем я должен это заменить, учитывая, что мой диалог открывается следующим образом jQuery.fn.dialog.open({}) - person Jake N; 18.10.2011
comment
Я вижу, что сначала закрывается диалоговое окно, а затем появляется предупреждение. Если это одинаковая ситуация для всех, может ли кто-нибудь помочь мне, чтобы сначала появилось это предупреждение, а затем при нажатии кнопки ОК окно закрывается? Исправь меня.... - person changeme; 10.07.2012
comment
Я все время получаю ReferenceError: событие не определено. Как мне определить событие? - person socialMatrix; 25.10.2012
comment
Это должно быть обновлено, чтобы использовать on () вместо bind (), которая теперь устарела. - person RBZ; 20.03.2014
comment
Имейте в виду, что если диалоговое окно пользовательского интерфейса jQuery никогда раньше не открывалось на странице, то оверлейный div не будет существовать в DOM. Следовательно, вы можете подумать о том, чтобы сделать что-то вроде этого: $('body').on('dialogclose', '.ui-dialog', function(){...}); - person thdoan; 16.10.2015
comment
Если это будет полезно для других, событие будет иметь свойство eventPhase при закрытии значком X или клавишей Esc. Если вы закроете программно (например, $(...).dialog('close')), этого не будет. Это один из способов отличить. - person jinglesthula; 09.10.2019

Я считаю, что вы также можете сделать это при создании диалога (скопированного из моего проекта):

dialog = $('#dialog').dialog({
    modal: true,
    autoOpen: false,
    width: 700,
    height: 500,
    minWidth: 700,
    minHeight: 500,
    position: ["center", 200],
    close: CloseFunction,
    overlay: {
        opacity: 0.5,
        background: "black"
    }
});

Заметка 2_

person Darryl Hein    schedule 05.10.2008
comment
Мне этот ответ кажется более правильным, чем принятый. Также здесь можно найти правильную документацию по API: api.jqueryui.com/dialog/#event -закрыть - person Chris Gillum; 16.08.2013
comment
Джейк Н. - Вам действительно нужно написать функцию, доступную для диалогового окна, под названием «CloseFunction», чтобы это работало, например, чуть выше вы можете написать var CloseFunction = function() { //Do your custom closing stuff here }; - person Adam Diament; 24.07.2014
comment
Это вариант, но время от времени код используется в разных местах. Выбранный ответ работает, когда вы хотите добавить другое поведение в разных контекстах и ​​повторно использовать код создания диалогового окна для стандартизации. - person NectarSoft; 26.09.2014
comment
У вас overlay дважды. Это не обязательно? - person radbyx; 28.10.2015
comment
Я полагаю, что нет ... поскольку первое будет преобладать над вторым. Я удалил это. - person Darryl Hein; 28.10.2015
comment
Это работает и определенно является необходимым и полезным ответом здесь, но он также запускает код CloseFunction каждый раз, когда диалог закрывается любым способом, а не только когда закрывается с помощью X или чего-то еще. Поэтому, если вы хотите запустить определенный код, когда диалоговое окно закрывается с помощью X или кнопки Отмена, но не когда оно закрывается из-за чего-то еще (например, в моем случае, когда отправленный ввод подтвержден как правильный), тогда это не будет Работа. - person mikato; 14.09.2016
comment
В итоге я использовал обходной путь, чтобы установить элемент данных для своего диалога, который является логическим флагом, установленным в другом месте, и я использую его, чтобы определить, должен ли выполняться мой закрытый код, как в этом ответе, или нет. Чтобы быть точным, первое, что я делаю после закрытия: это условие if, которое проверяет элемент данных. - person mikato; 14.09.2016

$( "#dialogueForm" ).dialog({
              autoOpen: false,
              height: "auto",
              width: "auto",
              modal: true,
                my: "center",
                at: "center",
                of: window,
              close : function(){
                  // functionality goes here
              }  
              });

"close" свойство диалога дает событие закрытия для того же самого.

person Taksh    schedule 17.07.2014

Вы также можете попробовать это

$("#dialog").dialog({
            autoOpen: false,
            resizable: true,
            height: 400,
            width: 150,
            position: 'center',
            title: 'Term Sheet',
            beforeClose: function(event, ui) { 
               console.log('Event Fire');
            },
            modal: true,
            buttons: {
                "Submit": function () {
                    $(this).dialog("close");
                },
                "Cancel": function () {
                    $(this).dialog("close");
                }
            }
        });
person Umair Noor    schedule 20.06.2012

Это то, что у меня сработало ...

$('#dialog').live("dialogclose", function(){
   //code to run on dialog close
});
person morttan    schedule 19.07.2011

Начиная с jQuery 1.7, метод .on () является предпочтительным методом для присоединения обработчиков событий к документу.

Поскольку на самом деле никто не создал ответа с использованием .on() вместо bind(), я решил создать его.

$('div#dialog').on('dialogclose', function(event) {
     //custom logic fired after dialog is closed.  
});
person Disper    schedule 10.11.2014
comment
Ответ OP в основном идентичен - person reggaeguitar; 01.12.2020
comment
@reggaeguitar правда. OP обновил ответ на () в 2015 году :) - person Disper; 02.12.2020
comment
Я не знал, что они обновили свои после вашего, я изменю свой голос против на голос за, если вы отредактируете свой ответ - person reggaeguitar; 03.12.2020

добавьте опцию «закрыть», как в примере, и сделайте то, что вы хотите, встроенную функцию

close: function(e){
    //do something
}
person Mehdi Roostaeian    schedule 24.11.2016

Вы можете попробовать следующий код для записи события закрытия любого элемента: страницы, диалога и т. Д.

$("#dialog").live('pagehide', function(event, ui) {
      $(this).hide();
});
person Alexei    schedule 16.06.2011
comment
Просто используйте .on () - вместо .live () или .bind () - person cssyphus; 15.05.2013

person    schedule
comment
Привет, Энди. Меня забавляет диалог jquery-ui, созданный с помощью css и javascript. Глядя на код, я думаю, что это для меня зацепка, но я не знаю, как к ней добраться. - person Brownie; 05.10.2008