所以,我有一个页面,PHP脚本回显我的所有HTML,包括一些javascript。有问题的javascript函数应该在选择框被更改时执行,但每次我更改选择框时,我的javascript控制台中都会出现错误,说明该函数未定义。
我甚至将功能简化为只显示警告框以帮助调试,但我仍然收到错误。
这是负责创建选择框的PHP函数:
function CreateMainSelect()
{
$html = "<select name=\"main_select\" onChange=\"test()\" id=\"main_select\" >";
$html .= "<option value='all'>All</option>";
$html .= "<option value='past'>Past</option>";
$html .= "<option value='current_and_future'>Current and Future</option>";
$html .= "<option value='date_range'>Date Range</option>";
$html .= "</select>";
return $html;
}
完全不必在功能中使用它,但我需要稍微修改已经存在的另一个类似功能,所以请不要对我太不高兴!!
这是回声的javascript函数:
echo '<script type="text/javascript">';
echo 'function test()';
echo '{';
echo 'alert("hello world");';
echo '}';
echo '</script>';
javascript正在PHP文件的底部回显。我也尝试将它移到顶部,但这并没有改变任何东西。
编辑:感谢大家的回复,您的所有建议都非常有用。我想出了问题,多达两件事情都出了问题。第一个问题是我的浏览器(我认为无论如何)缓存了我的javascript,因此我的函数的旧版本被调用了,这就是为什么一个完美的函数出现了创建错误的原因。通过清除我的缓存来解决。另一个问题(我认为)是javascript函数实际上并没有在执行之前加载。我通过将javascript放在单独的.JS文件中并将其链接到.PHP文件来解决这个问题。
答案 0 :(得分:3)
答案 1 :(得分:0)
您的代码段看起来很稳定(尽管我会在回声的末尾添加换行符以使结果更具可读性)。您的javascript中的其他位置可能会出现错误,导致您的函数无法加载。
答案 2 :(得分:0)
您应该使用HEREDOC来生成该javascript。它可以省去逃避所有内部报价的麻烦。如果您没有插入PHP变量,可以使用NOWDOC变体,这可以节省大量的PHP编译器开销。
function CreateMainSelect() {
$html = <<<EOL
<select name="main_select" onChange="test()" id="main_select" >
<option value='all'>All</option>
etc...
</select>
EOL;
return $html;
}
echo <<<EOL
<script type="text/javascript">
function test() {
alert("hello world");
}
</script>
EOL;
更容易阅读...更好的是退出PHP模式的echo块。任何体面的语法高亮编辑器都能够识别javascript并适当地着色。