解除/销毁fancybox 2事件

时间:2012-11-23 09:54:42

标签: fancybox destroy fancybox-2 unbind

我遇到一个奇怪的问题,我的代码通过ajax提取内容,然后将Fancybox(2)绑定到某些元素。问题是,当我“刷新”这个页面时,我会调用相同的函数来再次拉动和绑定Fancybox。

直到我改为Fancybox 2之前一直在努力的正常方法是取消绑定元素并重新绑定它们。然而,这似乎与FB2无关。

我尝试了以下内容:

$('.tool_button').unbind('click.fb');
$('.tool_button').unbind('click');
$('.tool_button').unbind();
$('.tool_button').off('click.fb');
$('.tool_button').off('click');
$('.tool_button').off();

我确实注意到源文件中可能有用的内容(起始行652):

// Unbind the keyboard / clicking actions
    unbindEvents: function () {
        if (F.wrap && isQuery(F.wrap)) {
            F.wrap.unbind('.fb');
        }

        D.unbind('.fb');
        W.unbind('.fb');
    }

如果有人可以在这里提供帮助,我们将不胜感激。

提前致谢。 尼克

4 个答案:

答案 0 :(得分:13)

如果您添加了属性live:false,则可以使用.off()

从元素中删除处理程序

在深入挖掘源代码之后,我还发现特定事件是click.fb-start,如果你想专门针对它。

例如:

$(".fancybox").attr('rel', 'gallery').fancybox({live: false});
//remove click handler
$('.fancybox').off("click.fb-start");

仅供参考在文档中,它说明了以下live

  

live:如果设置为true,fancyBox会使用“live”来协助点击事件。调成   “false”,如果您只需要申请当前收集,例如if   使用类似 - $(“#page”)。children()。filter('a')。eq(0).fancybox();

的jsfiddle

这是一个jsFiddle演示

http://jsfiddle.net/DigitalBiscuits/DBvt7/211/

答案 1 :(得分:6)

我知道这是一个旧线程,但只是想确认OAC Designs是绝对正确的: 取消绑定.fancybox链接仅在live参数设置为false时有效。

但是,无论live参数如何,你还可以在dom级别销毁Fancybox:

$(document).unbind("click.fb-start");

或者

$(document).off("click.fb-start");


的jsfiddle

请查看此JSFiddle以供参考。

答案 2 :(得分:0)

您可以使用此代码来破坏链接上的fancybox功能:

jQuery('a').unbind('click.fb').removeData('fancybox');

答案 3 :(得分:0)

感谢您的回复,我没有对上述内容进行测试,我采用了不同的方法来解决问题。

我所做的不是使用默认的Fancybox功能,而是创建了我需要Fancybox的功能,并在每种情况下手动调用Fancybox,因此没有绑定事件。

这不是最好的方法,上面可能会更好,但我会在新的一年里测试这个:)

再次感谢。