События 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
Я знаю, что это старая нить, но просто хотел подтвердить, что проекты 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 в каждом случае, который, таким образом, не связывал событие.
Это не самый лучший подход, и это может быть лучше, но я доберусь до тестирования этого в новом году :)
еще раз спасибо.