Jquery FancyBox iframe返回未定义的父项$(使用WordPress)
我试图从iframe中关闭,但是Jquery FancyBox iframe返回未定义的父项$(使用WordPress),jquery,wordpress,iframe,fancybox,undefined,Jquery,Wordpress,Iframe,Fancybox,Undefined,我试图从iframe中关闭,但是parent.$始终是未定义的。 这是我的iframe JavaScript: <script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'> </script> <script type="text/javascript"> jQuery(document).ready(fu
parent.$
始终是未定义的
。
这是我的iframe JavaScript:
<script type='text/javascript'
src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'>
</script>
<script type="text/javascript">
jQuery(document).ready(function($){
(function($) {
$.fn.closeFancyBox = function() {
$(this).click(function() {
parent.$.fancybox.close();
});
};
})(jQuery);
$('#cancel').closeFancyBox();
});
});
</script>
jQuery(文档).ready(函数($){
(函数($){
$.fn.closeFancyBox=函数(){
$(此)。单击(函数(){
父项。$.fancybox.close();
});
};
})(jQuery);
$(“#取消”).closeFancyBox();
});
});
替换parent.$.fancybox.close()代码>带有警报('clicked')代码>工作正常。我不明白为什么当iframe在同一个域中时,$
是未定义的
我正在使用WordPress 2.9.1和WordPress插件的FancyBox
- 主页:
//server.local/web/test/index.php
- iframe页面:
//server.local/web/test/wp content/plugins/wp test/test.htm
这些URL中的第一个是主页,第二个是iframe页面<代码>服务器。本地
是我的家庭测试服务器
有什么想法吗?如果有帮助的话,我可以粘贴整个源代码。它没有定义,因为WordPress在模式下运行jQuery。改用这个:
parent.jQuery.fancybox.close();
noConflict
模式意味着$
不等于jQuery。您必须显式地使用jQuery
来访问您通常可以使用$
访问的内容。您花了好几个小时试图调试它,但结果一无所获所以我用最新版本的FancyBox关闭了“用于WordPress的FancyBox”插件,它已经修复。真的应该早点尝试
在花了一些时间使用WordPress及其各种插件之后,我建议手动调用,而不是依赖插件。它只是增加了另一层复杂性,如果你知道你在做什么,就不需要在那里
感谢Doug在WordPress中为iframe-to-parent窗口jQuery指出了适当的语法。这对我很有用;)
谢谢你的这篇文章,它实际上引导了我一点。。。我感觉很糟糕,因为我只花了几分钟,我知道Fancybox for Wordpress是多么令人沮丧 你好,
使用Wordpress 3.0中的Fancy Box手动安装关闭Fancy Box iFrame时遇到问题的任何人:
在iframe中使用此链接:
<a href="#" onClick="parent.jQuery.fancybox.close();" title="Close window">close fancybox</a>
有效:)这些建议对我都不起作用。我必须使用下面的代码来解决这个问题。 最新版本可能支持parent.jQuery.fancybox.close();方法,但旧版本不适用于此 对于具有较旧版本的plugins/Jquery的现有站点,请尝试以下操作
function close_window()
{
$("#fancy_outer",window.parent.document).hide();
$("#fancy_overlay",window.parent.document).hide();
//window.top.window.$.fancybox.close(); this also does not work :(
}
您可以在Iframe内容中声明并使用函数close_window。我必须这样做:
window.top.window.$.fancybox.close()
之前出现类型错误。parent.fancybox.close()的任何变体对我都不起作用,一定是库冲突 这是我针对最新fancybox的工作方法,您应该使用css显示属性而不是.hide()方法,因为在这种情况下fancybox将不会再次打开
parent.jQuery('#fancybox-overlay').css('display', 'none');
parent.jQuery('#fancybox-wrap').css('display', 'none');
我的答案与wordpress无关,但总体上是针对fancybox的 在iframe中,如果包含了jquery主脚本(jquery-1.5.2.min.js),那么它将与主页上的脚本冲突,并且父脚本。$.fancybox在这种情况下不起作用 其他与jquery相关的东西(比如标签)将在iframe中工作。
因此,新手程序员不会想到iframe中的第二个jquery脚本就是反派。我也有同样的问题,并注意到我没有使用
type:'iframe'
在调用fancybox时,
它解决了我的问题对不起,应该说我知道这一点;我包含的js是一个片段。我编辑了我的问题以反映这一点——传递$意味着我不必使用“jQuery”。@Aleksandr在
iframe
中传递$
不会影响父页面。事实上,您在iframe
中包含了一个完全独立的jQuery实例。如果注意到所写内容,则传递$
,但引用父项。$
。这就好像你有var a=1;警报(obj.a)代码>除非代码中有赋值,否则您不会期望这两个项引用相同的值。您是对的,这是有意义的。但是,使用以下代码:jQuery('#cancel')。单击(函数(){parent.jQuery.fancybox.close();})
Firebug:parent.jQuery.fancybox未定义
中仍然出现未定义的错误。你知道为什么会这样吗?谢谢你迄今为止的帮助!一般来说,我对JavaScript和编码还是非常陌生。@Aleksandr我现在正在工作,但我会在有机会的时候尝试一个解决方案,并用结果更新我的答案。有史以来最好的黑客。非常感谢。
type:'iframe'