закройте коробку фантазии из функции из открытого 'окна фантазии' - PullRequest
60 голосов
/ 02 декабря 2009

Привет всем, я хочу иметь возможность закрыть fancyBox, когда он открыт изнутри.

Я пробовал следующее, но безрезультатно:

function closeFancyBox(html){
    var re = /.*Element insert complete!.*/gi;
    if( html.search( re ) == 0 ){
        $.fancybox.close();
        //alert("foo");
    }
}

foo откроется в диалоге, но не закроется. какие-нибудь намеки?

Ответы [ 16 ]

162 голосов
/ 25 июня 2010

Попробуйте это: . Родитель $ fancybox.close ();.

См. Документация по Fancybox API .

17 голосов
/ 02 декабря 2009

Согласно http://fancybox.net/faq

  1. Как закрыть FancyBox от другого элемента?

Просто позвоните $.fn.fancybox.close() на ваше событие onClick

Так что вы должны просто иметь возможность добавить в fn.

10 голосов
/ 09 июня 2011

Если вы просто хотите закрыть необычную коробку, достаточно закрыть ее.

$('#inline').click(function(){
  $.fancybox.close();
});
9 голосов
/ 11 февраля 2010

Бесполезно ставить .fn, он будет ссылаться на прототип.
Что вам нужно сделать, это $ .fancybox.close ();

Дело в том, что вы, возможно, испытываете другую ошибку от js.
Есть ошибки на экране?
Ваш fancybox и jquery - последние выпуски? jquery в настоящее время в 1.4.1 и fb в 1.3 что-то

Поэкспериментируйте, поместив ссылку внутри fancybox, и поместите в нее эту функцию.

Вы, наверное, читали это, но в любом случае, http://fancybox.net/api

Одна вещь, которую вам, вероятно, понадобится сделать, - это изолировать каждую часть, чтобы понять, что это такое.

5 голосов
/ 14 февраля 2013

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

<input type='button' value='Cancel' onclick='javascript:document.getElementById("fancybox-close").click();' />

У меня это работает!

4 голосов
/ 05 июля 2012

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

parent.jQuery.fancybox.close()
3 голосов
/ 12 мая 2011

Бит старого потока, но ...

На самом деле, я подозреваю, что ответ на оригинальный вопрос о том, как закрыть окно из в окне, имеет больше общего с тем фактом, что событие click не привязано к элементу. Если событие click прикреплено в document.ready, событие не будет прикреплено, когда fancybox создаст новое окно.

Вам необходимо повторно применить событие click после появления нового окна. Вероятно, самый простой способ сделать это - использовать функцию onComplete.

Это работает для меня:

$(".popup").fancybox({
    'transitionIn'  :   'fade',
    'transitionOut' :   'elastic',
    'speedIn'       :   600, 
    'speedOut'      :   400, 
    'overlayShow'   :   true,
    'overlayColor'  :   '#000022',
            'overlayOpacity'  : 0.8,
            'onComplete' : function(){$('.closer').click(function(){parent.$.fancybox.close();})}
});

На самом деле, после небольшого количества размышлений «живой», а не «щелчок» или «связывание» может сработать так же хорошо.

2 голосов
/ 02 декабря 2009

Используйте это, чтобы закрыть это вместо:

$.fn.fancybox.close();

Судя по исходному коду fancybox, именно так они и закрывают его.

1 голос
/ 11 апреля 2016

Добавьте $.fancybox.close() в любое место, где вы хотите, чтобы оно было запущено, в функции или в обратном вызове, в конец вызова ajax!

Woohoo.

1 голос
/ 04 ноября 2014

Я закончил, используя:

<script>parent.$("#fancy_close").click();</script>

Я полагаю, что у версии fancybox, которую мы имеем, нет функции $ .fancybox.close (), которую я мог бы вызвать: (

К вашему сведению, я просто хотел, чтобы страница закрыла fancybox, так как она завершила свою обработку в PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...