0

我对 PHP 和 JS 都很陌生,所以我很可能在这里遗漏了一些基本的东西。我知道PHP在服务器端运行,JS在客户端运行。我的目标是在 PHP 中生成一个数组,然后让用户的按键行为控制数组中元素的显示。这两个步骤都单独工作,但是当我尝试将所有内容放在一起时遇到了未捕获的引用错误。我在这里读到未捕获的引用错误通常来自语法/解析问题,但我无法在我的代码的相关部分中找到任何语法错误。

下面是一些示意图代码,说明了我遇到的问题。您会注意到函数 ShowNextCell() 在下面被注释掉了,第 20 行的函数调用也是如此。这段代码按预期执行:当您按下空格键时,顶行递增,底行显示PHP 数组。凉爽的。

但是现在如果你只取消注释ShowNextCell 的函数定义(保留函数调用仍然被注释掉),你会发现事情崩溃了:

  1. JS 控制台抛出一个未捕获的语法错误,可能是因为嵌入式 PHP 在此函数内没有正确评估,尽管相同的语法在表的第 3 行中评估得非常好。
  2. JS 控制台还会抛出未捕获的引用错误,因此它现在认为我的 setFocus() 函数未定义。这怎么可能,因为唯一改变的是定义一个未使用的函数(以及在定义 setFocus()之后发生的函数!?
  3. 此外,即使您通过单击顶行手动设置焦点,keyCheck() 函数也似乎未定义,正如在任何时候按下键时发生的另一个未捕获引用错误所证明的那样。

不幸的是,ShowNextCell() 函数对我来说是这个脚本中最关键的部分,所以我不能放过它。我整天都在工作,我完全受阻。我非常希望你们能帮助我了解这里发生了什么。谢谢!

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>

        <script>

        function keyCheck(e)
        {
           var KeyID = (window.event) ? event.keyCode : e.keyCode; 
           switch(KeyID)
           {
              case 32: //spacebar
                videocounter++; 
                document.getElementById("videocounterdisplay").innerHTML=videocounter; //this line works
                //ShowNextCell();
              break;
              }

        }

       function setFocus(){    
            document.getElementById("TopRow").focus();
        }

       /* 
       function ShowNextCell(){

            switch (videocounter)
                {
                case 1: 
                    document.getElementById("1port").innerHTML="<? echo $Stimulus[1]; ?>";
                    break;

                case 2: 
                    document.getElementById("2port").innerHTML='<? echo $Stimulus[2];?>';
                    break;

                case 3: 
                    document.getElementById("3port").innerHTML='<? echo $Stimulus[3];?>';
                    break;

                default:
                    document.getElementById("0port").innerHTML='An error has occurred';
                    break; 
           }        
        }
        */

        var videocounter = 0;

        </script>

    </head>
    <body onload="setFocus()">

        <?php
        $Stimulus = array("a","b","c","d");
        ?>    

        <table border="1">

        <tr id="TopRow" tabindex="-1" onkeydown="keyCheck()"> <!-- Desired behavior: rightmost cell should start at 1 and increment with each press of the spacebar. -->
            <td colspan="3">
                Counter is set to: 
            </td>
            <td id="videocounterdisplay">

            </td>
        </tr>

        <tr> <!-- Desired behavior: an additional cell should be filled in (from left to right) each time the spacebar is pressed.  -->
            <td id="0port">
                <? echo $Stimulus[0]; ?>
            </td>
            <td id="1port">

            </td>
            <td id="2port">

            </td>
            <td id="3port">

            </td>
        </tr>

        <tr> <!-- Desired behavior: just to illustrate that indexing the php array is not the problem. -->  
            <td>
                <? echo $Stimulus[0]; ?>
            </td>
            <td>
                <? echo $Stimulus[1]; ?>
            </td>
            <td>
                <? echo $Stimulus[2]; ?>
            </td>
            <td>
                <? echo $Stimulus[3]; ?>
            </td>

        </tr>
    </table>



    </body>
</html>
4

1 回答 1

1

在该函数中<? echo $Stimulus[1]; ?>,您在定义$Stimulus数组之前就拥有了。将您的数组定义移动到文件的顶部。在您尝试访问 PHP 中的数组之前,这些行必须运行:

    <?php
        $Stimulus = array("a","b","c","d");
    ?>    
于 2013-07-03T22:42:49.293 回答