jQuery Facebox не работает с DD Ajaxtabs, любое решение? - PullRequest
0 голосов
/ 07 декабря 2011

После того, как я выдернул свои волосы за последние 2 часа, я так и не смог выяснить конфликт. Пожалуйста, помогите мне в устранении этой проблемы. Я использую http://www.dynamicdrive.com/dynamicindex17/ajaxtabscontent/ajaxtabs_suppliment3.htm для создания вкладок ajax для своих сайтов, а также http://defunkt.io/facebox/ для модальных окон Но когда я пытаюсь загрузить ссылки через Facebox через вкладки ajax, содержимое не загружается в Facebox. Но он работает нормально для любых ссылок за пределами вкладок ajax. Есть идеи?

1 Ответ

2 голосов
/ 07 декабря 2011

Это просто из-за того факта, что любой новый контент, который вы загружаете в DOM, не будет иметь каких-либо ранее установленных обработчиков событий.

Таким образом, в этом случае ваш плагин facebox инициализируется до того, как новый контент будет загружен во вкладки ajax. Поэтому, по сути, плагин facebox не знает, что эти новые ссылки существуют.

Ответ заключается в повторной инициализации плагина после загрузки нового содержимого.

Так что вам нужно позвонить: -

  $('a[rel*=facebox]').facebox()

... опять же, как только содержимое новых вкладок ajax было загружено в DOM. Из очень краткого обзора скрипта ajax tabs я мог бы представить, что вы можете легко решить эту проблему, просто повторно инициализировав плагин facebox (как показано выше), добавив эту строку в функцию, которая вызывается каждый раз, когда любой новый контент загружается на вкладку ajax.

В качестве альтернативы (и гораздо проще) вы можете инициализировать плагин facebox, используя плагин jQuery livequery

Используя этот код (после того, как вы включили скрипт livequery на свой сайт: -

$('a[rel*=facebox]').livequery(function() {

$(this).facebox();

});

Затем Livequery автоматически обнаружит новые загруженные ссылки на Facebox, когда они будут добавлены в DOM, и применяет к ним плагин Facebox.

EDIT:

Если это все еще не дает желаемого эффекта (хотя я действительно не вижу, почему не как живой запрос, когда я использовал его, было мечтой), попробуйте этот грязный маленький хак, чтобы отсоединять и перепривязывать facebox каждый раз, когда вы щелкаете мышью. вниз. На ЛЮБОМ фейсбоксе ссылка новая или старая.

$('a[rel*=facebox]').live("mousedown", function() { 
    $(this).unbind('click'); //everytime you click unbind the past event handled.
    $(this).facebox();
});
...