Javascript错误,功能未明确定义时定义

时间:2011-07-06 19:51:24

标签: php javascript html echo undefined

所以,我有一个页面,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文件来解决这个问题。

3 个答案:

答案 0 :(得分:3)

这里似乎工作得非常好:

PHP:http://codepad.org/CGY47E1G

HTML:http://jsfiddle.net/maniator/9BCfv/

答案 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并适当地着色。

相关问题