为什么我的javascript无法正常工作?

时间:2014-05-15 15:10:40

标签: javascript php if-statement

我一直在研究这段代码。我们的想法是根据HTML表单的结果(不在此页面上)使javascript显示div。但是,我的javascript函数永远不会起作用。我已经将问题隔离到脚本中,而不是首先调用脚本。这是我的代码:

<!DOCTYPE HTML>
<html>
<body>
<?php
While ($result=mysql_fetch_array($data)){ //I have mySQL code before this
        $equipment= $result['safety equipment'];
$equipment2= str_replace(' ', '_', $equipment); //modified equipment name without spaces so that post can read it
            $problem = $_POST[$equipment2];
            ?>
<div style="display:none;" id="<?php echo $equipment?>"> <!--Code that creates a div for each equipment -->
            <h1>Report a problem</h1> <br>
            You reported that there is a problem with the <?php echo $equipment." in ".$name;?>.<br>
            Please describe the problem.
            <form>
                <textarea row="5" column="300" name="Issue">                        
                </textarea>
            </form>
            </div>
            <?php
    if ($problem=="working"){
        inspectRoom($UID,$equipment,null);
    }else {
        echo $equipment; //this part works
        echo'<script type="text/javascript">'; //this part does not work
        echo'console.log("test");';
        echo'var test ='.$equipment.';';
        echo'alert (test);';
        echo'Appear(test);';
        echo'</script>';                    
    }
    }
    ?>
    <script type="text/javascript">
        function Appear(equipment){
            alert("hi"); //error trapping
            document.getElementById(equipment).style.display='block';
        }
        </script>

</body>
</html>

$ equipment是一个带有设备名称的字符串(例如:Fume Hood) $ problem是从上一页检索的字符串。它也有一些设备的名称。 在我的控制台中,我收到以下错误: &#34;语法错误:缺失;在陈述之前#34; 我究竟做错了什么?

5 个答案:

答案 0 :(得分:2)

您将基于PHP的文本直接转储到Javascript上下文中,这非常危险。任何JS元字符(尤其是')都会导致语法错误并终止整个JS代码块。

    echo'var test ='.$equipment.';';

应该是

  echo 'var test = ', json_encode($equipment), This will produce syntactically valid JS code, no matter what's in `$equipment`.

另外,您还有许多其他语法错误。您的php while未包含在<?php ... ?>代码块中,因此它会直接作为原始文本出现在您的输出中。你的while循环中的html现在被认为是PHP代码的一部分,因此这将是另一个语法错误。等等......等等。换句话说,这段代码完全被破坏了。

答案 1 :(得分:0)

单纯谈论javascript,因为那是你的问题所在,你的Appear函数永远不会被定义,因为PHP代码会回显出调用Appear之前的JS功能已定义。

答案 2 :(得分:0)

它不起作用,因为你在回声之后忘记了空间。还有其他错误,例如你的while不在标签内。

答案 3 :(得分:0)

代码的这部分

    echo $equipment; //this part works
    echo'<script type="text/javascript">'; //this part does not work
    echo'console.log("test");';
    echo'var test ='.$equipment.';';
    echo'alert (test);';
    echo'Appear(test);';
    echo'</script>'; 

将其替换为

    echo $equipment; //this part works
    echo'<script type="text/javascript">'; //this part does not work
    echo'console.log("test");';
    echo"var test ='$equipment';";
    echo'alert (test);';
    echo'Appear(test);';
    echo'</script>'; 

当值为字符串时,变量不被引号括起来;

答案 4 :(得分:-1)

首先,你错过了一个&gt;在第6行。