Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.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 检测Fancybox 2是如何关闭的-jQuery_Javascript_Jquery_Fancybox - Fatal编程技术网

Javascript 检测Fancybox 2是如何关闭的-jQuery

Javascript 检测Fancybox 2是如何关闭的-jQuery,javascript,jquery,fancybox,Javascript,Jquery,Fancybox,我使用fancybox显示包含表单的iFrame。提交表格后,我关闭fancybox,如下所示: parent.jQuery.fancybox.close() 然后,我在afterClose事件上做了一些AJAX工作 我遇到的问题是,如果有人通过单击关闭按钮或单击fancybox外部的调光器来关闭fancybox,那么它仍然会在afterClose函数中调用AJAX函数 如何检测fancybox是如何关闭的,如果fancybox是这样关闭的,则仅运行afterClose功能: parent.jQ

我使用fancybox显示包含表单的iFrame。提交表格后,我关闭fancybox,如下所示:

parent.jQuery.fancybox.close()

然后,我在
afterClose
事件上做了一些AJAX工作

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

如何检测fancybox是如何关闭的,如果fancybox是这样关闭的,则仅运行
afterClose
功能:

parent.jQuery.fancybox.close()

我仍然需要给我的用户关闭fancybox的选项,这样我就不能禁用关闭按钮

更新

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

启动
afterClose
功能后,是否可以将
调用者
值更新为我可以检查的值?我将如何执行此操作?

尝试使用。当表单被提交时,触发您的自定义事件,让我们将其称为“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()时触发的自定义事件

如果表单已提交,为什么不签入
afterClose
事件?您可以通过javascript在submit按钮上添加一个标志

var flag = 0;
$(".custom-class-of-your-submit-button").bind("click", function () {
    flag = 1;
});
在您的
afterclose事件中
只需输入一条if语句:

if (flag == 1) {
    \\ execute your AJAX code
}
希望能有帮助

编辑

您可以尝试在消息上发送标志,我想,但我尚未尝试:

听起来这是可能的-你能举个例子吗?谢谢@Borna,我尝试了一下,但没能成功。这里不存在范围问题吗?因此,我们关闭fancybox,但随后从我在fancybox中运行的脚本(我刚刚关闭)中调用一个函数,以触发父页面中的另一个函数。不知道您正在fancybox中的表单提交处理程序上运行。为什么不把它放在应用程序的全球范围内?或者我不是很了解你,我不明白这是怎么回事。提交按钮(在iFrame中)不在父页面上调用的
afterClose
事件的范围之外吗我总是得到一个未定义的
标志
错误。也许你可以试试这个?