首页 文章

jquery-ui-dialog - 如何挂钩到对话框关闭事件

提问于
浏览
173

我正在使用jquery-ui-dialog插件

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

有没有办法从对话中捕获一个关闭事件?

我知道我可以在单击关闭按钮时运行代码但不包括用户使用escape或右上角的x关闭 .

10 回答

  • 180

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

    因为没有人真正使用使用创建答案 . on() 而不是 bind() 我决定创建一个 .

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

    在示例下添加选项'close'并执行您想要的内联函数

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

    我找到了!

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

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

    显然,我可以用我需要做的任何事情来取代警报 .
    Edit: 从Jquery 1.7开始,bind()已成为on()

  • 14

    我相信您也可以在创建对话框时执行此操作(从我执行的项目中复制):

    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

  • 20
    $("#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');
    }**
    });
    
  • 236
    $( "#dialogueForm" ).dialog({
                  autoOpen: false,
                  height: "auto",
                  width: "auto",
                  modal: true,
                    my: "center",
                    at: "center",
                    of: window,
                  close : function(){
                      // functionality goes here
                  }  
                  });
    

    对话框的“close”属性给出了close事件 .

  • 2

    你也可以尝试这个

    $("#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");
                    }
                }
            });
    
  • 5

    这对我有用...

    $('#dialog').live("dialogclose", function(){
       //code to run on dialog close
    });
    
  • 8

    如果我正在谈论,不会 $(window).unload() (对话框窗口)给你需要的钩子吗?

    (如果我误解了,并且你在谈论通过CSS而不是弹出式浏览器窗口创建的对话框,那么 all 关闭该窗口的方法是你可以注册点击手的元素 . )

    Edit: 啊,我现在看到你在谈论jquery-ui对话框,这是通过CSS制作的 . 您可以通过使用类 ui-dialog-titlebar-close 注册元素的单击处理程序来挂钩关闭窗口的 X .

    也许更有用的是你告诉你如何快速解决这个问题 . 在显示对话框时,只需弹出FireBug和 Inspect 可以关闭窗口的元素 . 您将立即看到它们的定义方式,并为您提供注册点击处理程序所需的内容 .

    所以要直接回答你的问题,我相信答案真的是“不” - 没有一个你可以挂钩的关闭事件,但是“是” - 你可以挂钩所有方法来相当容易地关闭对话框并得到你想要什么 .

  • 10

    您可以尝试使用以下代码捕获任何项目的结束事件:页面,对话框等 .

    $("#dialog").live('pagehide', function(event, ui) {
          $(this).hide();
    });
    

相关问题