0

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

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

弹出窗口有一个“取消”按钮,允许用户关闭弹出窗口(使用 jQuery.fancybox.close();)。我必须在弹出页面中包含 jquery 以允许其他一些功能工作,这会阻止 jQuery.fancybox.close(); 从工作。如果我从弹出页面中删除 jquery,那么它可以正常工作,但是我无法弄清楚如何在主页上引用 jquery 的实例(我已经尝试过 parent 以防万一,虽然我不认为这应该工作,因为它是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 的更好方法,那将不胜感激。

非常感谢!

戴夫

4

1 回答 1

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标签中添加内容,您应该使用 iframe 而不是 ajax 类型的 fancybox。

于 2012-05-31T14:50:18.370 回答