【发布时间】: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