【问题标题】:Detect how Fancybox 2 is closed - jQuery检测 Fancybox 2 是如何关闭的 - jQuery
【发布时间】:2015-09-21 11:20:44
【问题描述】:

我正在使用 fancybox 来显示一个包含表单的 iFrame。提交表单后,我会像这样关闭fancybox:

parent.jQuery.fancybox.close();

然后我在 afterClose 事件上做一些 AJAX 事情。

我遇到的问题是,如果有人通过单击关闭按钮或单击fancybox 外部的调光器来关闭fancybox,那么它仍然会调用afterClose 函数中的AJAX 函数。

我如何检测fancybox 是如何关闭的,并且只有在fancybox 像这样关闭时才运行afterClose 函数:

parent.jQuery.fancybox.close();

我仍然需要为我的用户提供关闭fancybox的选项,这样我就无法禁用关闭按钮。

更新

查看 fancybox 对象,我可以看到 afterClose 函数有多个值:

是否可以将caller 值更新为afterClose 函数触发后我可以检查的值?我该怎么做?

【问题讨论】:

    标签: javascript jquery fancybox


    【解决方案1】:

    尝试使用custom events。提交表单时触发您的自定义事件,让我们将其称为“fancybox:aftercloseajax”,然后监听该事件,然后执行您的 AJAX 操作。

    编辑: 不知道您的代码看起来如何,但可能的解决方案:

    $('form').on('submit', function(){
      parent.jQuery.fancybox.close();
      $('#targetDIV').trigger('fancybox:aftercloseajax');
    });
    
    $('#targetDIV').on('fancybox:aftercloseajax', function(){
      //event handler
      //do your ajax stuff as before
    });
    

    基本上不是监听afterClose事件,而是监听你调用fancybox.close()时触发的自定义事件

    【讨论】:

    • 听起来这是可能的——你能举个例子吗?
    • 感谢@Borna,已经尝试过,但无法正常工作。这里没有范围问题吗?所以我们关闭了fancybox,然后从我在fancybox(我刚刚关闭)中运行的脚本中调用一个函数来触发父页面中的另一个函数。
    • 不知道您正在fancybox 内的表单提交处理程序上运行。为什么不将它放在应用程序的全局范围内?还是我不太了解你。
    【解决方案2】:

    如果提交了表单,为什么不签入您的afterclose 活动?你可以通过你的javascript在你的提交按钮上放一个标志

    var flag = 0;
    $(".custom-class-of-your-submit-button").bind("click", function () {
        flag = 1;
    });
    

    在您的afterclose event 中添加一个 if 语句:

    if (flag == 1) {
        \\ execute your AJAX code
    }
    

    希望对你有帮助。

    编辑

    您可以尝试使用 on 消息发送我认为的标志,但我还没有尝试过: How to communicate between iframe and the parent site?

    【讨论】:

    • 我不明白这是怎么回事。提交按钮(在 iFrame 中)是否不在父页面上调用的 afterClose 事件范围之外? - 我总是收到flag is not defined 错误。
    • 也许你可以试试这个? stackoverflow.com/questions/9153445/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 2011-05-22
    • 2011-12-23
    • 2023-04-04
    • 2011-12-11
    相关资源
    最近更新 更多