Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQueryUI对话框-如何连接到对话框关闭事件_Javascript_Jquery_Jquery Ui_Modal Dialog_Jquery Ui Dialog - Fatal编程技术网

Javascript jQueryUI对话框-如何连接到对话框关闭事件

Javascript jQueryUI对话框-如何连接到对话框关闭事件,javascript,jquery,jquery-ui,modal-dialog,jquery-ui-dialog,Javascript,Jquery,Jquery Ui,Modal Dialog,Jquery Ui Dialog,我正在使用插件 在某些情况下,当对话框关闭时,我正在寻找刷新页面的方法 是否有方法从对话框中捕获关闭事件 我知道我可以在单击“关闭”按钮时运行代码,但这并不能覆盖使用escape或右上角的x关闭的用户。如果我了解您所说的窗口类型,$(window).unload()(对于对话框窗口)是否会提供所需的钩子? (如果我误解了,你说的是通过CSS而不是弹出式浏览器窗口创建的对话框,那么关闭该窗口的所有方法都是可以注册click handers的元素。) 编辑:啊,我明白了,现在你说的是jQuery

我正在使用插件

在某些情况下,当对话框关闭时,我正在寻找刷新页面的方法

是否有方法从对话框中捕获关闭事件


我知道我可以在单击“关闭”按钮时运行代码,但这并不能覆盖使用escape或右上角的x关闭的用户。

如果我了解您所说的窗口类型,$(window).unload()(对于对话框窗口)是否会提供所需的钩子? (如果我误解了,你说的是通过CSS而不是弹出式浏览器窗口创建的对话框,那么关闭该窗口的所有方法都是可以注册click handers的元素。) 编辑:啊,我明白了,现在你说的是jQueryUI对话框,它是通过CSS生成的。通过在类ui对话框标题栏close中注册元素的单击处理程序,可以钩住关闭窗口的X。 也许更有用的是,你可以告诉你如何快速解决这个问题。在显示对话框时,只需弹出打开FireBug并检查可关闭窗口的元素。您将立即看到它们是如何定义的,这为您提供了注册单击处理程序所需的内容。 因此,要直接回答您的问题,我相信答案确实是“否”——没有一个关闭事件可以挂接,但“是”——您可以挂接所有方法来相当轻松地关闭对话框并获得所需的内容。

我找到了它

您可以使用以下代码捕获关闭事件:

 $('div#popup_content').on('dialogclose', function(event) {
     alert('closed');
 });
显然,我可以用我需要做的任何事情来替换警报。

编辑:从Jquery 1.7开始,bind()已变为on()

我相信在创建对话框时也可以这样做(从我做过的项目中复制):


注意
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');
    }
});
$("#dialog").live('pagehide', function(event, ui) {
      $(this).hide();
});

这就是我的工作

$('#dialog').live("dialogclose", function(){
   //code to run on dialog 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的“close”属性为该对话框提供关闭事件

从jQuery1.7开始,.on()方法是将事件处理程序附加到文档的首选方法

因为实际上没有人使用。
on()
而不是
bind()
创建答案,所以我决定创建一个

$('div#dialog').on('dialogclose', function(event) {
     //custom logic fired after dialog is closed.  
});

在sample下面添加类似“close”的选项,并执行您想要的内联函数

close: function(e){
    //do something
}

嘿,安迪。我通过css和javascript创建了jQueryUI中的对话框。通过查看代码,我认为其中有一个钩子,但我不知道如何找到它。打字:$('div#popup_content').bind('dialogclose',function(event)){…}这很有帮助,但是
$('div#popup_content')
对吗?请记住,我的对话框是这样打开的,
jQuery.fn.dialog.open({})
我看到对话框先关闭,然后警报出现,如果每个人的情况都一样,有人能帮我先显示警报,然后单击“确定”,然后窗口关闭吗?请纠正我的错误……这应该更新为在()上使用,而不是现在已经过时的bind()。请记住,如果以前从未在页面上打开过jQuery UI对话框,那么覆盖div将不存在于DOM中。因此,您可以考虑这样做:<代码> $'('Boo')。on(‘dialCuffy’,‘.UI’’,函数({…});<代码>只需使用.on()--而不是.live()或.bind(),我觉得这个答案比公认的答案更正确。此外,可以在这里找到正确的API文档:Jake N-您需要实际编写一个名为“CloseFunction”的对话框可以访问的函数,以使其工作,例如,您可以在上面编写
var CloseFunction=function(){//Do your custom closing stuff here}这是一个选项,但此时代码正在不同的地方使用。当您希望在不同的上下文中添加不同的行为并重用对话框创建代码以实现标准化时,所选答案适用。您有两次
overlay
。这不是Nessery,对吗?这很有效,而且肯定是一个必要且有用的答案,但它也会在对话框以任何方式关闭时运行CloseFunction代码,而不仅仅是在使用X或其他工具关闭时。因此,如果您想在对话框用X或Cancel按钮关闭时运行某些代码,而不是在对话框被其他事件关闭时运行(比如在我的例子中,当提交的输入被验证为正确时),那么这将不起作用identical@reggaeguitar对。OP在2015年更新了on()的答案:)我不知道他们在你的答案之后更新了他们的答案,如果你编辑你的答案,我会将我的反对票改为赞成票
$('div#dialog').on('dialogclose', function(event) {
     //custom logic fired after dialog is closed.  
});
close: function(e){
    //do something
}