Загрузка нового содержимого в Fancybox при закрытом событии Fancybox

#javascript #fancybox

#javascript #fancybox

Вопрос:

Я застрял с проблемой с окнами Fancybox. Я использую fancybox для отображения содержимого скрытого div на моей странице («.popup» fancybox ниже). В этом содержимом есть ссылка на новое содержимое fancybox с именем #exemple . Когда я нажимаю на ссылку в первом fancybox, он загружает содержимое второго fancybox (iframe — это работает нормально). Но я хотел бы вернуться к первому fancybox, когда пользователь нажимает кнопку закрытия второго fancybox.

Я пытался использовать событие «OnClosed», но оно не работает…

Есть ли способ сделать это?

Заранее благодарим вас за помощь!

Вот код, который я использую :

 $("#exemple").fancybox({
    'width'             : '100%',
    'height'            : '100%',
    'titleShow'         : true,
    'titlePosition'     : 'over',
    'titleFormat'       : formatTitle,
    'autoScale'         : false,
    'centerOnScroll'    : true,
    'type'              : 'iframe',
    'onClosed'          : function() {
            alert('test');
            $(".popup").trigger('click');
        } 
});

$(".popup").fancybox({
    'autoScale'         : false,
    'centerOnScroll'    : true
});

// and here is the HTML code to trigger the hidden div:
<a style="font-weight: bold;" href=#data class=popup>our data</a>

//and the HTML code of the link inside the hidden div that gets displayed in the fancybox:
<a id=exemple title="xxx" href=xxx.php?id=xxx>link</a>
  

Комментарии:

1. можете ли вы создать jsfiddle?

Ответ №1:

Я работал с тем же, и OnClosed не работал. После долгих исследований я выяснил, что существует какая-то проблема с управлением версиями, и OnClosed работает в более старых версиях fancy box. Другой подход, который сработал для меня, заключается в следующем использовании BeforeClose вместо OnClosed .

‘BeforeClose’: функция() { оповещение (‘тест’) },

Это может быть полезно для некоторых читателей.

Комментарии:

1. Это сработало для меня, 1, пожалуйста, обратите внимание, что при копировании и вставке приведенного выше кода апостроф копируется как одинарная кавычка, поэтому повторно введите апострофы, чтобы избежать ошибок javascript

2. Вы также можете использовать ‘AfterClose’: function () {alert(‘test’)}. Я надеюсь, что это будет работать так же.

Ответ №2:

Это помогло бы, если бы у вас был jsFiddle для работы, но сначала попробуйте обернуть код onClosed функции в setTimeout . Нулевого времени должно быть достаточно:

 'onClosed' : function() {
    setTimeout(function(){
        $(".popup").trigger('click');
    }, 0);
} 
  

Комментарии:

1. Вау, это работает! Большое спасибо, ты гений. Каким было бы решение, если бы я хотел обновить содержимое fancybox вместо закрытия и повторного открытия?

2. А? Это действительно работает? Какова концепция, лежащая в основе этого? Я вижу это как взлом прямо сейчас.

3. На самом деле это не взлом … это обходной путь. Функция очистки вызывается по завершении анимации. Существует ошибка jquery с преждевременным вызовом обратного вызова анимации, и способ обойти ее — использовать setTimeout с нулевым временем.

4. Хотя это не тот вопрос или точный ответ, который я хотел, но этот setTimeout был большим, большим, большим намеком, и я решил проблему, которая убивала меня в течение двух дней. Большое спасибо

Ответ №3:

 'onClosed'=> 'js:function() { alert("test") }',
  

примечание: нам нужно поместить «js:»

я автоматически вызываю fancybox (используя расширение)

У меня все работает нормально