jquery-ui-dialog — Как подключиться к событию закрытия диалога
-
05-07-2019 - |
Вопрос
я использую jquery-ui-dialog
плагин
Я ищу способ обновить страницу в некоторых случаях, когда диалоговое окно закрывается.
Есть ли способ захватить событие закрытия из диалога?
Я знаю, что могу запустить код при нажатии кнопки закрытия, но это не распространяется на закрытие пользователя с помощью escape или x в правом верхнем углу.
Решение
Я нашел это!
Вы можете поймать событие закрытия, используя следующий код:
$('div#popup_content').on('dialogclose', function(event) {
alert('closed');
});
Очевидно, я могу заменить предупреждение тем, что мне нужно сделать.
Редактировать . Начиная с Jquery 1.7 функция bind () стала включена ()
Другие советы
Полагаю, вы также можете сделать это при создании диалога (скопировано из проекта, который я сделал):
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"
}
});
Примечание close: CloseFunction
$("#dialog").dialog({
autoOpen: false,
resizable: false,
width: 400,
height: 140,
modal: true,
buttons: {
"SUBMIT": function() {
$("form").submit();
},
"CANCEL": function() {
$(this).dialog("close");
}
},
**close: function() {
alert('close');
}**
});
$( "#dialogueForm" ).dialog({
autoOpen: false,
height: "auto",
width: "auto",
modal: true,
my: "center",
at: "center",
of: window,
close : function(){
// functionality goes here
}
});
Свойство диалога «закрыть» дает событие закрытия для него.
Вы также можете попробовать это
$("#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");
}
}
});
Это то, что сработало для меня ...
$('#dialog').live("dialogclose", function(){
//code to run on dialog close
});
Начиная с jQuery 1.7, метод .on () является предпочтительным методом для прикрепления обработчиков событий к документу.
Поскольку никто не создал ответ с использованием. on ()
вместо bind ()
, я решил его создать.
$('div#dialog').on('dialogclose', function(event) {
//custom logic fired after dialog is closed.
});
добавьте опцию 'close' как в примере и сделайте то, что вы хотите, встроенную функцию
close: function(e){
//do something
}
Если я понимаю тип окна, о котором вы говорите, разве $ (window) .unload () (для диалогового окна) не даст вам нужный крючок? Р> <р> (И если я неправильно понял, и вы говорите о диалоговом окне, созданном с помощью CSS, а не о всплывающем окне браузера, то все способы закрытия этого окна - это элементы, для которых можно зарегистрировать обработчики кликов. .) Р> <р> Редактировать. А теперь я вижу, что вы говорите о диалогах jquery-ui, которые сделаны с помощью CSS. Вы можете подключить X , который закрывает окно, зарегистрировав обработчик щелчка для элемента с классом ui-dialog-titlebar-close . Р> <р> Возможно, более полезно рассказать вам, как быстро это выяснить. При отображении диалога просто откройте FireBug и проверьте элементы, которые могут закрыть окно. Вы сразу увидите, как они определены, и это даст вам то, что вам нужно для регистрации обработчиков кликов. Р> <р> Поэтому, чтобы непосредственно ответить на ваш вопрос, я считаю, что ответ на самом деле "нет" - нет события, которое можно перехватить, но " да " - вы можете подключить все способы, чтобы довольно легко закрыть диалоговое окно и получить то, что вы хотите.
Вы можете попробовать следующий код для захвата события закрытия для любого элемента: страницы, диалогового окна и т. д.
$("#dialog").live('pagehide', function(event, ui) {
$(this).hide();
});