PHP中无法识别Javascript数组-未定义

PHP中无法识别Javascript数组-未定义,javascript,php,arrays,tooltip,Javascript,Php,Arrays,Tooltip,我正在重写在PHP中工作的html代码。我快到了,但最后一部分是让我的工具提示正常工作。该程序列出了XML文件中的一系列活动,这些活动的时间表也在XML文件中。工具提示使用数组定义每个活动的计划。将鼠标放在“活动”上会显示带有该活动日程安排的工具提示。tootip程序是由比我能干得多的人编写的,可以免费使用,在我的原始程序中运行良好。程序可以运行,但工具提示都未定义。我知道我的变量工作正常(尽管正在调试),但我相信数组并不像我希望的那样。这是我创建的代码的一部分,我将添加一些调试输出。我怀疑do

我正在重写在PHP中工作的html代码。我快到了,但最后一部分是让我的工具提示正常工作。该程序列出了XML文件中的一系列活动,这些活动的时间表也在XML文件中。工具提示使用数组定义每个活动的计划。将鼠标放在“活动”上会显示带有该活动日程安排的工具提示。tootip程序是由比我能干得多的人编写的,可以免费使用,在我的原始程序中运行良好。程序可以运行,但工具提示都未定义。我知道我的变量工作正常(尽管正在调试),但我相信数组并不像我希望的那样。这是我创建的代码的一部分,我将添加一些调试输出。我怀疑document.write中的数组没有如我所希望的那样工作

我的代码
echo <<<EOF
     <div id="table">
       <table id="tbloc" border="0" width="100%">


EOF;

      foreach($activities as $activity)
      {
       if ($cycle==1)
       {
         echo '<tr>';
       }
       $act=$activity->column;
       $n = $n+1;
echo <<<EOF

  <script type ="text/javascript">
  var n = $n;
  if (n == 1)
  {
   var A   = new Array();
  }

  A[n] = "$activity->schedule";
  action = "$act";
  document.write('<td width="25%"><a href="javascript:void(0)" onmouseover="Tip(A[n])"  onmouseout="UnTip()"><b>'+action+'</b></a></td>');
  n=n+1;
  </script>
EOF;


            if ($cycle!==4)
            {
            $cycle=$cycle+1;
            }
            else
            {
            $cycle=1;
            echo '</tr>';
            }

     }
?>
echo
调试器输出窗体资源管理器

注意:将鼠标移到所需的活动上,以查看该活动的常规计划

     <div id="table">
       <table id="tbloc" border="0" width="100%">

<tr>
  <script type ="text/javascript">
  var n = 1;
  if (n == 1)
  {
   var A   = new Array();
  }

  A[n] = "<b><u>Amateur Radio Schedule:</u></b><br />Wed  11:30am - 1:00pm<br />Wed 6:00pm - 8:30pm";
  action = "Amateur Radio";
  document.write('<td width="25%"><a href="javascript:void(0)" onmouseover="Tip(A[n])"  onmouseout="UnTip()"><b>'+action+'</b></a></td>');
  n=n+1;
  </script>
  <script type ="text/javascript">
  var n = 2;
  if (n == 1)
  {
   var A   = new Array();
  }

  A[n] = "<b><u>Bingo Schedule:</u></b><br />Fri 12:30pm - 3:00pm";
  action = "Bingo";
  document.write('<td width="25%"><a href="javascript:void(0)" onmouseover="Tip(A[n])"  onmouseout="UnTip()"><b>'+action+'</b></a></td>');
  n=n+1;
  </script>
  <script type ="text/javascript">
  var n = 3;
  if (n == 1)
  {
   var A   = new Array();
  }

  A[n] = "<b><u>Book Club Schedule:</u></b><br />Every 2nd Thurs 2:00pm - 3:00pm<br />Every 3rd Mon 1:00pm - 3:00pm";
  action = "Book Club";
  document.write('<td width="25%"><a href="javascript:void(0)" onmouseover="Tip(A[n])"  onmouseout="UnTip()"><b>'+action+'</b></a></td>');
  n=n+1;
  </script>

var n=1;
如果(n==1)
{
var A=新数组();
}
A[n]=“业余无线电时间表:周三上午11:30-下午1:00
周三下午6:00-8:30”; action=“业余无线电”; 文件。写(“”); n=n+1; var n=2; 如果(n==1) { var A=新数组(); } A[n]=“宾果游戏时间表:周五下午12:30-3:00”; 动作=“宾果”; 文件。写(“”); n=n+1; var n=3; 如果(n==1) { var A=新数组(); } A[n]=“读书俱乐部时间表:每2个星期四下午2:00-3:00
每3个星期一下午1:00-3:00”; action=“图书俱乐部”; 文件。写(“”); n=n+1;
您将一个
标记放在一个
中,这是不应该做的。您报告的问题是在几个地方输出变量名而不是变量

var n = $n;
输出正好如此。你是说

var n = <?php echo $n; ?>
代码中有许多实例,而不仅仅是这两个

但是你需要分开你的JS,最小的改变至少是让它有效,虽然不是理想的解决方案,是这样的:

<?php
$table=''; // this will be outputted as one string

foreach($activities as $activity){
    if ($cycle==1){
        $table.= '<tr>';
    }
    $act=$activity->column;
    $n = $n+1;
    ?>
    <script type ="text/javascript">
    var n = <?php echo $n; ?>
    if (n == 1){
        var A   = new Array();
    }
    A[n] = <?php echo json_encode($activity->schedule); ?>;
    <?php
        $table.='<td width="25%"><a href="javascript:void(0)" onmouseover="Tip(A['.$n.'])"  onmouseout="UnTip()"><b>'.$act.'</b></a></td>';
    ?>
    n=n+1;
    </script>
    <?php 
} // end foreach (guessing this is where it's meant to end
?>
<div id="table">
<table id="tbloc" border="0" width="100%">
<?php echo $table; ?>
</table>
<?php 

变量n=
如果(n==1){
var A=新数组();
}
A[n]=;
n=n+1;

如果您打算将PHP与HTML混合使用,您可能会发现关闭和重新打开标记
?>HTML会更容易。谢谢您提出的document.write问题,为什么要使用它?您正在用PHP编写HTML,不需要用PHP编写javascript在页面加载时编写HTML。我建议您让PHP输出所需的所有HTML,而不使用javascript。然后再问一次问题,给出生成的HTML和工具提示插件的源代码,以及您尝试过的内容(
onmouseover=“Tip(A[n])”onmouseout=“UnTip()”
),可能有人会很快给您答案。虽然复制了那行代码,但我发现了一个问题:您输出的是
n
,而不是变量所包含的数字。我同意,我承认我输出的是n而不是数字,这是问题的症结所在,也是我要问的问题——如何让它输出数组数字而不是“n”。我将按照您的建议尝试以更传统的方式重新编码这段代码。很抱歉,没有包括$cycle,它来得更早,并且会计算在4之后开始新行的单元格数。前面还有一条路要走。表实际上是有效的,唯一的问题是工具提示。我会研究这些回答,看看他们是否能理解,他们是否能帮助我解决问题。感谢大家为我提供输入,我感谢你们的回答。我尝试了上面的代码,但它不起作用(我确实添加了$cycle以使表按我所希望的方式工作),当我将鼠标悬停在语句的活动和语法错误(调试器)上时,我得到了(object object)。显然,我需要扩展我在这一领域的知识和经验,您给了我一些东西来修改我的代码。还在努力。谢谢,我应该为循环部分添加was我的代码,现在它可以正常工作,没有语法错误(对于上面的代码)。运行代码时未报告错误,但仍为tootltip获取对象。只是想澄清一下,代码不完整。我已经说明了这个问题,您需要理解区别是什么,并将其应用于代码的其余部分。很难理解为什么在没有看到新生成的HTMLI的情况下获取object。我已经添加了修改后的HTML以及一些调试器摘录
document.write('<td width="25%"><a href="javascript:void(0)" onmouseover="Tip(A[' + n + '])"  onmouseout="UnTip()"><b>'+action+'</b></a></td>');
<?php
$table=''; // this will be outputted as one string

foreach($activities as $activity){
    if ($cycle==1){
        $table.= '<tr>';
    }
    $act=$activity->column;
    $n = $n+1;
    ?>
    <script type ="text/javascript">
    var n = <?php echo $n; ?>
    if (n == 1){
        var A   = new Array();
    }
    A[n] = <?php echo json_encode($activity->schedule); ?>;
    <?php
        $table.='<td width="25%"><a href="javascript:void(0)" onmouseover="Tip(A['.$n.'])"  onmouseout="UnTip()"><b>'.$act.'</b></a></td>';
    ?>
    n=n+1;
    </script>
    <?php 
} // end foreach (guessing this is where it's meant to end
?>
<div id="table">
<table id="tbloc" border="0" width="100%">
<?php echo $table; ?>
</table>
<?php