我一直在研究这段代码。我们的想法是根据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; 我究竟做错了什么?
答案 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行。