【发布时间】:2010-09-15 09:00:41
【问题描述】:
我正在使用jquery-ui-dialog 插件
我正在寻找在某些情况下关闭对话框时刷新页面的方法。
有没有办法从对话框中捕获关闭事件?
我知道我可以在单击关闭按钮时运行代码,但这不包括用户使用转义或右上角的 x 关闭。
【问题讨论】:
标签: javascript jquery jquery-ui modal-dialog jquery-ui-dialog
我正在使用jquery-ui-dialog 插件
我正在寻找在某些情况下关闭对话框时刷新页面的方法。
有没有办法从对话框中捕获关闭事件?
我知道我可以在单击关闭按钮时运行代码,但这不包括用户使用转义或右上角的 x 关闭。
【问题讨论】:
标签: javascript jquery jquery-ui modal-dialog jquery-ui-dialog
我找到了!
您可以使用以下代码捕获关闭事件:
$('div#popup_content').on('dialogclose', function(event) {
alert('closed');
});
显然我可以用我需要做的任何事情来替换警报。
编辑:从 Jquery 1.7 开始,bind() 已变为 on()
【讨论】:
$('div#popup_content') 对吗?我应该用什么替换它,记住我的对话框是这样打开的jQuery.fn.dialog.open({})
$('body').on('dialogclose', '.ui-dialog', function(){...});
我相信您在创建对话框时也可以这样做(从我所做的项目中复制):
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
【讨论】:
var CloseFunction = function() { //Do your custom closing stuff here };
overlay。这不是必要的吧?
$("#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
}
});
对话框的“close”属性给出了相同的关闭事件。
【讨论】:
你也可以试试这个
$("#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: function(e){
//do something
}
【讨论】:
如果我理解您所说的窗口类型,那么 $(window).unload() (对于对话框窗口)是否会为您提供所需的钩子?
(如果我误解了,并且您说的是通过 CSS 制作的对话框,而不是弹出式浏览器窗口,那么 all 关闭该窗口的方式是您可以注册点击处理程序的元素.)
编辑: 啊,我现在看到你在谈论 jquery-ui 对话框,它是通过 CSS 制作的。您可以通过为具有类 ui-dialog-titlebar-close 的元素注册一个单击处理程序来挂钩关闭窗口的 X。
也许更有用的是你告诉你如何快速解决这个问题。在显示对话框时,只需弹出打开 FireBug 并 Inspect 可以关闭窗口的元素。您将立即看到它们是如何定义的,并为您提供了注册点击处理程序所需的内容。
因此,要直接回答您的问题,我相信答案确实是“否”-没有可以挂钩的关闭事件,但是“是”-您可以轻松挂钩所有关闭对话框并获得你想要什么。
【讨论】:
您可以尝试以下代码来捕获任何项目的关闭事件:页面、对话框等。
$("#dialog").live('pagehide', function(event, ui) {
$(this).hide();
});
【讨论】: