#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 (используя расширение)
У меня все работает нормально