为什么我在Firebug中收到错误“你是未定义的”?
我的页面包含照片和照片库的显示,作为PHP代码中使用“break”划分的特殊单独部分。
使用“Fancybox.js”显示照片和照片库。
第一次尝试打开照片时,一切正常,但是当我刷新页面后再次执行此操作时,Firebug显示错误“u is undefined”。
我正在使用的菜单的Jquery显示页面的这些单独部分:
$(document).ready(function(){
$(".menu_rfr").bind('click', function() {
$("#main").html('<img src="img/spin.gif" class="spin">');
location.replace($(this).attr('rel'));
});
$(".menu_clickable").bind('click', function() {
$("#main").html('<img src="img/spin.gif" class="spin">');
$("#main").load($(this).attr('rel'), function(event) {
});
$(".menu_clickable").unbind("click");
});
});
简化的PHP代码如下所示:
<?
if (!isset($a)) $a = '';
switch($a)
{
case 1:
default:
?>
<div class="menu_clickable prof_link" id="prof_info" rel="?a=2">Photos</div>
<div class="menu_clickable prof_link" id="prof_info" rel="?a=3">Gallery</div>
<div id="main"></div>
<?
break;//photos
case 2:
?>
<script type="text/javascript">
$("a.group").fancybox({
'titlePosition' : 'over',
'overlayShow':false
});
</script>
<?
<a href="1.jpg" id="group" class="group"><img src="tmb/1.jpg" border="0"></a>
<?
break;
case 3: // photo gallery
?>
<script type="text/javascript">
$("a.groupg").fancybox({
'titlePosition' : 'over',
'overlayShow':false
});
</script>
<?
<a href="2.jpg" id="groupg" class="groupg"><img src="tmb/2.jpg" border="0"></a>
<?
break;
}
?>
正如我所说,这是一个简化的代码,可能还有一些错误。我只想表明我在哪里以及如何使用Fancybox。
页面顶部的菜单的jquery代码和fancybox之间是否存在冲突,或者还有一些其他原因导致我在打开其他部分后仍然在Firebug中出现错误“u is undefined” PHP页面并尝试重新打开照片?
答案 0 :(得分:5)
查看您的HTML源代码并确保您没有声明两次FancyBox。我刚刚在firebug中弹出了完全相同的错误,这就是我在源代码中找到的内容:
<script language="javascript" type="text/javascript" src="./ext_scripts/jquery.fancybox-1.3.1/fancybox/jquery.fancybox-1.3.1.pack.js"></script>
<link rel="stylesheet" href="./ext_scripts/jquery.fancybox-1.3.1/fancybox/jquery.fancybox-1.3.1.css" type="text/css" media="screen" />
<script language="javascript" type="text/javascript" src="./ext_scripts/jquery.fancybox-1.3.1/fancybox/jquery.fancybox-1.3.1.pack.js"></script>
不确定为什么会发生这种情况,但是如果你像我一样在你的PHP中嵌入你的include和require_onces,你可以得到一些非常时髦的Javascript引用。
答案 1 :(得分:1)
您可能包含两次fancybox.js脚本导致问题。请检查所有文件并删除不需要的文件。
答案 2 :(得分:0)
我也有同样的错误 - 我认为这是由于清理代码重置'加载'div。我有一个非常讨厌的修复:
变化:
if ($("#fancybox-wrap").length) {
return;
收件人:(跳过多重初始化检查)
if (false && $("#fancybox-wrap").length) {
并添加:
$.apzFancyboxInit = fancybox_init;
这样做可以让我们多次调用初始化程序;并将函数指针保存到全局变量中。我们现在要做的就是确保每次关闭fancybox时都调用$ .apzFancyboxInit函数。执行此操作的最佳位置是onClosed
函数处理程序;所以(在我的情况下),我的电话看起来像这样:
$.fancybox(
{
'showCloseButton' : true,
'type' : 'ajax',
'onClosed' : function()
{
$.apzFancyboxInit();
},
答案 3 :(得分:0)
如果您使用的是“翻录”模板,您可能会发现在</body>
标记正上方的html模板中写有fancybox生成的div。
如果您禁用了JavaScript,请检查您的html输出是否包含ID为fancybox-wrap
的div,并将其删除。