2010-07-12 4 views
2

Это, вероятно, не так уж и сложно, потому что в противном случае IAM уверен я wouldv'e нашел ответ где-то ...Открытие ссылки внутри FancyBox-окна внутри одного окна FancyBox

Что я хочу сделать я открыть fancybox (плагин jquery), загружая его с ajax-содержимым, и когда я нажимаю ссылку внутри него, он загружает его с помощью нового ajaxcontent, например, щелкая ссылку внутри фрейма.

Любые идеи?

ответ

1

Вы можете

  1. Используйте IFrame внутри FancyBox (быстрый & простой, не будет использовать Ajax, но будет делать, как вы хотите, и проще SEO), или

  2. положить DIV внутри вашего fancybox, заполните его с помощью ajax и html(), затем привяжите содержащиеся в нем элементы a «click» к функции, которая будет делать то же самое снова.
    Обратите внимание, что с этим вторым способом, вы не будете автоматически кнопки назад работу браузера, SEO труднее, и т.д.

+0

Ну да, что будет делать трюк, конечно. Но то, что я на самом деле было после, которое, возможно, было неприемлемо для объяснения, - это способ использовать переходы sam и изменение размера, которое fancybox использует для функции галереи, но также использовать его для других ссылок. Спасибо хоть! – Nils

+0

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

1

Вот как я это делаю:

$('#fancybox-content a').live('hover', function(){ 
    $(this).fancybox(); 
    }); 

Это fancybox- анимация, включая изменение размера, любую ссылку в fancybox.

+0

Не знаю, почему вы получили downvoted, это было лучшее решение на странице. – deweydb

1

Я не код, но я, кажется, он работает после того, как я боролся в течение 5 часов

Если вы открываете новый HTML/PHP файл с FancyBox это делает работу (ie9/FF/Safari/хром)

Я создал 4 страницы - main.php/page1.php/page2.php/page3.php

main.php >> Используйте код FancyBox (стиль как требуется)

$(document).ready(function() { 
    $("a.openModal").fancybox({ 
    'autoDimensions' : false, 
    'width'   : 750, 
    'height'  : 500, 
    'transitionIn'  : 'elastic', 
    'transitionOut'  : 'elastic', 
    'titleShow'  : false, 
    'hideOnContentClick' : false, 
    }); 
}); 

{A HREF = "page1.php" класс = "openModal"} Имя Страница {/ а}


пользователь нажимает на ссылку FancyBox я указал на main.php (я использовал классы, как у меня есть много FancyBox ссылки на одной странице)

Все страницы имеют ссылки друг с другом (но не main.php)


page1.php & page2.php & page3.php - должны иметь один и тот же код, идентичный использованный на главной странице (в противном случае вы получите изменение размера и переход i ОПРОСЫ)

page1.php

$(document).ready(function() { 
    $("a.openModal").fancybox({ 
    'autoDimensions' : false, 
    'width'   : 750, 
    'height'  : 500, 
    'transitionIn'  : 'elastic', 
    'transitionOut'  : 'elastic', 
    'titleShow'  : false, 
    'hideOnContentClick' : false, 
    }); 
}); 
  • {A HREF = "page1.php," класс = "openModal"} Имя Страница {/ а}
  • {A HREF = "page2.php "class =" openModal "} Название страницы {/ a}
  • {a href =" page3.PHP»класс =„Имя openModal“} Страница {/ а}

отлично работает для меня - ссылки через FancyBox Modal, на страницу, а затем ссылки на страницы в Modal, ссылки на другую страницу в Modal (я пошел 6 ссылок в)

Должно быть «проще» способом (правильное слово было бы «правильно»). - но это временное решение мое решение

Я не тестировал с формами - и я не может получить «javascript: history.go (-1)» для работы -

, поэтому ТОЛЬКО идет вперед (помощь с этим будет УДИВИТЕЛЬНЫМ)

0

Используйте обратный вызов onComplete (1,3 или ниже) или afterShow (2.0+).

Просто запустите тот же код там, что и на вашей странице, чтобы активировать fancybox.

Мне нравится делать его функциональным, поэтому вы можете легко его переименовать.

function initFancybox() { 
    $("a.openModal").fancybox({options..., onComplete: initFancybox }); 
} 

Вы также можете сделать это вручную и использовать селектор, если вы хотите, чтобы активировать FancyBox ссылки в недавно открытом FancyBox. Это может быть несколько более эффективным.

function initFancybox(selector) { 
    if (selector == null) { selector = ""; } 
    $(selector+" a.openModal").fancybox({options..., 
    onComplete: function() { initFancybox("#fancybox-content"); } 
    }); 
} 
0

Да, что вам нужно, это рамка (iframe). FancyBox должен знать, что содержание его нагрузка должна рассматриваться как кадр так что вы можете использовать

$('#contentclassorid').fancybox({ type: "iframe" });

Смежные вопросы