События Unbind/Destroy fancybox 2

у меня странная проблема, у меня есть код, который тянет контент через 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();

I заметил следующее В исходном файле, который может быть использован (начальная строка 652):

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

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

Если кто может помочь буду весьма признателен.

спасибо заранее. Ник!--3-->

4 ответов


если вы включаете атрибут live:false тогда вы сможете удалить обработчики из своих элементов с помощью .off()

после копания исходного кода я также обнаружил, что конкретное событие click.fb-start, Если вы хотите адресовать его конкретно.

например:

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

​ FYI в документации говорится следующее о live:

live: если указано значение true, fancyBox использует "live"до события assing click. Устанавливать "false", если необходимо применить только к текущей коллекции, например, если используя что - то вроде - $ ("#page" ).дети.)(фильтр ("а").экв(0).fancybox();

jsFiddle

вот демонстрация jsFiddle

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


Я знаю, что это старая нить, но просто хотел подтвердить, что проекты OAC абсолютно правы: Развязывание .fancybox ссылки работают только если , вы также можете уничтожить Fancybox на уровне dom независимо от live параметр, выполнив:

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

или

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


JSFiddle

зацените JSFiddle для ссылка.


вы можете использовать этот код, чтобы уничтожить функциональность fancybox по ссылкам:

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

Спасибо за ответ, я не проверял выше, я использовал другой подход для решения проблемы.

то, что я сделал, было вместо использования функциональности fancybox по умолчанию, я создал функции, для которых мне понадобится Fancybox и вручную вызывается Fancybox в каждом случае, который, таким образом, не связывал событие.

Это не самый лучший подход, и это может быть лучше, но я доберусь до тестирования этого в новом году :)

еще раз спасибо.