Fancybox, получив Fancybox для привязки с помощью LIVE() к элементам, загружаемым на страницу после загрузки

У меня есть страница, которая загружается и после загрузки, она втягивает список LI для заполнения ленты новостей.

<li><a href="/url/" class="quickview">quick view</a></li>
<li><a href="/url/" class="quickview">quick view</a></li>
<li><a href="/url/" class="quickview">quick view</a></li>

Я пытаюсь получить причудливый ящик, чтобы вызвать, когда пользователь нажимает на быстрый просмотр, но не имел никакой удачи. Любые идеи?

$(document).ready(function() {
    $('.quickview').fancybox();
});

также попытался:

$(document).ready(function() {
   $('a.quickview').live('click', function() {
        $(this).fancybox();
    });
});

http://fancybox.net/

Спасибо за любые идеи...

Ответы

Ответ 1

Проблема заключается в том, чтобы прикрепить fancybox в загруженный элемент AJAX, правильно?

У меня такие же проблемы, и я нашел это решение.

Я скопирую его здесь, см. исходный отчет об ошибке для получения дополнительной информации:

$.fn.fancybox = function(options) {

$(this)
  .die('click.fb')
  .live('click.fb', function(e) {       
    $(this).data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {})))
    e.preventDefault();
    [...]

Кредит переходит на jeff.gran.

Ответ 2

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

Мое предпочтительное решение - запустить fancybox вручную из живого события, например:

$('.lightbox').live('click', function() {
    $this = $(this);
    $.fancybox({
        height: '100%',
        href: $this.attr('href'),
        type: 'iframe',
        width: '100%'
    });
    return false;
});

EDIT: из jQuery 1.7 live() устарел, а вместо него следует использовать(). Подробнее см. http://api.jquery.com/live/.

Ответ 3

это должно работать после каждого запроса ajax

$(document).ajaxStop(function() { 
    $("#whatever").fancybox();
});

Ответ 4

Так как .on теперь рекомендуется по .live, и после прочтения документации по делегированным событиям, вот решение, которое я придумал с (если ваши элементы имеют класс "триггер-модальный" ):

$(document).on('click', '.trigger-modal', function() {
  // remove the class to ensure this will only run once
  $(this).removeClass('trigger-modal');
  // now attach fancybox and click to open it
  $(this).fancybox().click();
  // prevent default action
  return false;
});

Ответ 5

Из моего понимания Fancybox вызов fancybox() simple присоединяет плагин к выбранному элементу. Вызов fancybox в событии click ничего не откроет.

Думаю, вам просто нужно добавить

$(li_element_that_you_create).fancybox();

к коду, который создает новые элементы LI в вашем списке

ИЗМЕНИТЬ

Если вы используете load, вы должны сделать что-то вроде:

$('#ul_id_goes_here').load('source/of/news.feed', function() {
  $('.quickview').fancybox();
});