如何全局处理fancybox的onClose事件?

Tim*_*Tom 6 javascript jquery fancybox

我在我的应用程序中使用Fancybox.现在要处理close事件,我们写了类似的东西:

$(".fancybox").fancybox({onClose:function(){alert('blah');}}
Run Code Online (Sandbox Code Playgroud)

如此文档页面所示:

http://fancyapps.com/fancybox/#docs

但是我想为所有fancybox编写一些常见且全局的东西,每次都可以为任何fancybox运行.我怎么做?简而言之,我不想在每个fancybox上编写onClose的代码,也不希望它依赖于class,id(例如,.fancybox在这种情况下).我怎么做?我试着写:

$.fancybox({onClose:function(){alert('blah');}}
Run Code Online (Sandbox Code Playgroud)

但它不起作用,从文档中看起来这是以程序方式打开的功能.

Ant*_*una 5

我不确定这是否是最好的解决方案,但我会选择一个发布/子模式,所以,在你的fancybox中你应该做那样的事情.

$(".fancybox").fancybox(
{   onClose:function(){
                $(window).trigger('fancyboxClosed');
            }
});
Run Code Online (Sandbox Code Playgroud)

然后,代码中的某个地方:

$(window).on('fancyboxClosed', function(){
    // Your global function for fancybox closed
});
Run Code Online (Sandbox Code Playgroud)

我不太了解你的目的,但请记住,你总是可以传递一个命名函数而不是一个匿名函数,所以你总是触发相同的函数.

如果您想根据每个fancybox制作不同的东西,上面的示例应该是可行的方法.

此外,您可以将事件附加到您想要的任何对象.为方便起见,只是使用窗口

编辑

您也可以编辑您的fancybox来源(编辑1.3.4)只需添加$(window).trigger('fancyboxClosed');到第953行附近.

  • 这很好,但它仍然意味着我写了$(window).trigger('fancyboxClosed'); 为每个fancybox. (2认同)

mol*_*a10 5

尝试使用方法

关闭前或关闭后

这段代码工作正常

$(".fancybox").fancybox({beforeClose:function(){alert('blah');}}
Run Code Online (Sandbox Code Playgroud)