Как закрыть fancybox из дочернего окна?

родительская ссылка:

<a href="feedback.php" id="feed">Provide your feedback here</a>

Код jQuery для запуска fancybox...

$("#feed").fancybox();

коды в feedback.php...

      <html>
        <head>
<script language="javascript">    
$(document).ready(function(){
    $("#feed_submit").click(function(){
    //Name is alerted
    alert($("#name").val());

    //code to close fancy box(Not working)
    $.fancybox.close();

    });
    });
</script>
        </head>
        <body>
        <form method="post" name="feedback" id="feedback" action="">
                <div>
                    <label>name</label>
                    <input type="text" name="name" id="name"/>
                </div>
                <div>
                    <label>feedback</label>
                    <input type="text" name="content" id="content"/>
                </div>
        <div><input type="button" name="feed_submit" id="submit" value="submit"></div>
    </form>    
    </body>
    </html>

После нажатия кнопки отправки мне нужно закрыть причудливое окно на этой странице с помощью jquery

я пытался использовать

$.fancybox.close();
parent.$.fancybox.close();

Но это не работает для меня. Если есть возможность закрыть эту форму ajax, сообщите мне.


person Mohan Ram    schedule 08.12.2010    source источник
comment
Можете ли вы показать нам остальную часть вашего кода?   -  person karim79    schedule 08.12.2010
comment
@ karim79 Я думаю, что это весь соответствующий код.   -  person Alin Purcaru    schedule 08.12.2010
comment
у меня работает $.fancybox.close(); спасибо, я искал это :D   -  person holms    schedule 06.09.2011


Ответы (10)


Следующий код должен работать и работал у многих людей.

parent.$.fn.fancybox.close();

Однако я также видел, например, в этом вопросе , jQuery запускается в режиме noConflict без ведома пользователя. Если это так для вас, вам придется изменить свой скрипт на

parent.jQuery.fn.fancybox.close();

Если ни один из этих способов не работает, воспользуйтесь таким инструментом, как Firebug для Firefox или консоль разработчика для Chrome, чтобы узнать, есть ли сообщение об ошибке, и сообщите нам, что это такое.

person David Hedlund    schedule 13.12.2010

Пытаться

window.parent.$.fancybox.close();

при условии, что $.fancybox.close(); работает в родительском окне.

person Alin Purcaru    schedule 08.12.2010
comment
fancybox открывает элемент DIV, а не фактическое всплывающее окно, поэтому window.opener не будет. - person David Hedlund; 13.12.2010
comment
@David Как вы можете опубликовать этот комментарий, если вы сами использовали window.parent в своем ответе? Вы сделали что-то подобное и все еще думаете, что в этом случае fancybox открывает div, а не другое окно (iframe)? - person Alin Purcaru; 13.12.2010
comment
Он открывает div с iframe. iframe не имеет window.opener. - person David Hedlund; 13.12.2010
comment
@David Дэвид, я тестировал, и кажется, что это не так ... Я ожидал, что iframe будет действовать так же, как всплывающее окно. Мне жаль. Меня удивил тот факт, что вы сказали, что он открывает DIV. Я думал, у вас сложилось впечатление, что он всегда использует AJAX. - person Alin Purcaru; 13.12.2010
comment
хорошо, я думаю, мы неправильно поняли друг друга, я хотел сказать, что window.opener не сработает, так как открывалка есть только у всплывающих окон. Все остальное не открыто в том же смысле. Является ли это всплывающим окном в дизайне, это то, о чем iframe не знает. Проблема с noConflict заключается в том, что он часто используется в таких местах, как WordPress, без ведома разработчика и с оберткой, так что $ все еще можно использовать; (function($) { $.fancybox.close(); /* this will work */ })(jQuery); - person David Hedlund; 13.12.2010

Пытаться:

$("#fancybox-close").trigger('click');
person user1758863    schedule 24.10.2012
comment
это немного помогает - person SoluableNonagon; 19.03.2013

Когда вы используете fancybox с типом: iframe, в поле iframe вам нужно вставить все свои библиотеки, такие как jquery и т. д. Затем, чтобы закрыть причудливое окно iframe, просто используйте parent.$.fancybox.close()

Помните, что fancybox с типом «iframe» открывается в новом окне, fancybox с другими типами открывается в том же окне.

person pmdstudio    schedule 30.08.2011

Столкнулся с той же проблемой, это единственное решение, которое я смог найти, которое помогло:

сам код такой:

parent.jQuery.fancybox.close();

он работает в функции как таковой:

jQuery("#cancelId").click(function(){
    parent.jQuery.fancybox.close();
});

надеюсь, это поможет, Наоре

person Naore Azenkut    schedule 24.03.2013

$.fn.fancybox.close();

Это работает ?

person Poelinca Dorin    schedule 13.12.2010

// в дочернем окне или iframe поместите эту функцию:

function closeIframe(){ parent.closeIframeMain(); }

// и эта ссылка, чтобы закрыть это окно

<a onclick="closeIframe();" href="#">Close window</a>

//затем в родительском окне поместите эту функцию:

function closeIframeMain(){ jQuery("#fancybox-close").trigger("click"); }

person Henry Quintero    schedule 16.07.2013

Это точно сработает, просто скопируйте и вставьте:

<a href="javascript:;" onclick="jQuery('.fancybox-close').fancybox().trigger('click');">Close from Inside</a>

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

Удачи в программировании :)

person Imran Zahoor    schedule 26.09.2013

У меня была такая же проблема, но с ASP.NET.

По сути, на странице я открываю страницу (с элементом управления формой внутри) следующим образом:

$.fancybox({
                href: '/ContactUs.aspx',
                type: 'iframe',
                padding: 60,
                width: 465,
                height: 670,
                maxWidth: 465,
                maxHeight: 670,
            });

Когда я нажимаю закрыть на FancyBox, он работает, но если я сначала отправлю его, ПОТОМ закрою его, fancyBox не закроется, даже если страница находится в том же домене.

В конце концов я обнаружил, что вы должны установить autoSize:false при открытии FancyBox:

 $.fancybox({
                href: '/ContactUs.aspx',
                type: 'iframe',
                padding: 60,
                width: 465,
                height: 670,
                maxWidth: 465,
                maxHeight: 670,
                autoSize: false
            });

Теперь это должно работать. Пожалуйста, ответьте, если это работает для кого-то еще. Ваше здоровье.

Воля

person Will    schedule 16.01.2014

parent.jQuery.fancybox.close(); с .$. - вылетает в IE8. С этим - все ок.

person publikz.com    schedule 18.02.2011
comment
Кстати, я добавляю блок try () и несколько обозначений этого (закрытие фантазии), я нахожу здесь. И он начинает работать в IE/FF. : - person publikz.com; 25.04.2011