如何在另一个版本的jquery加载的ajax弹出窗口中关闭fancybox?

时间:2012-05-31 14:47:01

标签: ajax fancybox jquery

当弹出页面中包含jquery(我正在使用AJAX并在弹出窗口中包含外部php页面)时,我遇到关闭fancybox弹出窗口的问题。 fancybox的设置如下:

$(".various3").fancybox({
'type'    : 'ajax',
'titlePosition'     : 'inside',
'transitionIn'      : 'none',
'transitionOut'     : 'none',
'ajax' : {
type        : 'GET'
}
});

弹出窗口有一个“取消”按钮,允许用户关闭弹出窗口(使用jQuery.fancybox.close();)。我必须在弹出页面中包含jquery以允许一些其他功能工作,这可以防止jQuery.fancybox.close();从工作。如果我从弹出页面中删除jquery然后它工作正常,但是我无法弄清楚如何在主页面上引用jquery的实例(我已经尝试过父亲以防万一,虽然我不会想到这应该工作,因为它是一个div而且确实没有)。我尝试过使用:

var localjquery = jQuery.noConflict(true);
弹出页面中的

这允许我使用jQuery.fancybox.close();成功关闭弹出窗口但是这会阻止使用$来引用此页面上无法编辑的其他插件所需的jquery。如果我添加

var mainjquery = jQuery.noConflict();

在主页面上的第一个jquery实例后,这显然工作正常,我可以将其称为父节点上的mainjquery,但如果那样尝试

mainjquery.fancybox.close();

在弹出窗口上,它表示mainjquery未定义。

我怀疑这是一个问题,因为多个jquery实例的组合,并通过ajax将一个完全独立的页面加载到div中(而不是使用iframe等,然后我可以使用parent。或类似)。如果有人能够阐明如何从子弹出窗口引用mainjquery引用,或者更好的方式我可以关闭fancybox,那将非常感激。

非常感谢!

戴夫

1 个答案:

答案 0 :(得分:0)

最好的办法是测试它是否是一个ajax请求,如果是这样的话,不要包含jquery(或者你已经拥有的任何其他脚本)。

以下是我在php页面上用于执行ajax和常规页面请求的代码示例。

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && 
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
....
if(!IS_AJAX)
{
    //echo your header with scripts
    echo $header;
}
//else just echo the contents of the page body

编辑:

如果您需要向head标记添加内容,则应该为fancybox使用iframe而不是ajax类型。