【问题标题】:Impossible to close fancybox ajax window无法关闭fancybox ajax 窗口
【发布时间】:2014-05-20 06:36:26
【问题描述】:

无论我如何调用close 方法,我似乎都无法让它工作。

我尝试了所有可能的变化:

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

无论我尝试在代码中的何处或如何调用fancybox 上的close 方法,它总是返回没有对象,并且关闭未定义。一路走来,我在某处丢失了 fancybox 的参考资料。

首先我用一个简单的链接打开一个花式框窗口 <a href='".base_url('item/map_view/'.$item_id)."' class='itembox fancybox.ajax' data-fancybox-type='ajax' data-itemid='".$item_id."'>".$item['titulo']."</a>

然后,从已经打开的 fancybox 窗口中,一个按钮触发另一个按钮的打开(注意:它关闭了第一个)。 <input type="button" value="Eu quero!" class='itembox fancybox.ajax' href="<?php echo base_url("email/quer_item/".$idata["id"])?>" data-fancybox-type='ajax'>

最后,我希望能够在第二个fancybox 窗口中处理表单的提交,它会显示一个消息框(带有Messi)并关闭fancybox。但我开始认为这可能是不可能的。

处理提交的代码:

$('#email_queroitem').submit(function(e) {
    e.preventDefault();
    $.post($("#email_queroitem").attr("action"), 
        $("#email_queroitem").serialize(), function(data) {

        var json = myParseJSON( data );
        if( json.status=="OK" ) {

            $.fancybox.close(); // this is where I want to close

            new Messi(json.msg, {title: 'Email enviado com sucesso!',
                titleClass: 'success', modal: true });
        } else {
            new Messi( json.msg, {title: 'Oops...', titleClass: 'anim error', 
                buttons: [{id: 0, label: 'Fechar', val: 'X'}]});
        }
    }).fail( function() { general_error(); } );
    return false;
});

【问题讨论】:

  • 也试过this?我还没有检查将 preventDefault after ajax 调用是否不同,但是您可以尝试
  • 没用。结果相同... :(
  • 您收到成功消息了吗? ...我的猜测是,您的 ajax 调用中的某个地方触发了一个 js 错误,导致 fancybox 无法工作
  • 不,如果代码与我的问题完全相同,则不会显示该消息。 fancybox 错误会阻止脚本的其余部分执行。如果我尝试一些替代方法,例如$('#fancybox-close').click(),则会显示消息,但它仍然不起作用。
  • 由于您使用的是ajax,您的被调用(ajaxed)页面不应包含任何jQuery 或fancybox 脚本,因为它们将从调用页面继承它们,否则它们可能会发生冲突。此外,您的自定义脚本也应该包含在调用(主)页面中(调用时,您的 ajaxed 内容将成为主页内容的一部分)。见jsfiddle.net/UDa7w/show

标签: jquery ajax fancybox


【解决方案1】:

我在使用 colorbox 时遇到了类似的问题。我最终想出的是将对 colorbox 对象的初始调用保存到全局命名空间。例如:

globalNamespace.myBox = $colorbox({href:'whatever'});
$.post('http://yoururl').success(function(data){
    // call close function like this
    globalNamespace.myBox.close()
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2016-04-03
    相关资源
    最近更新 更多