繁体   English   中英

Javascript错误,明确定义时function未定义

[英]Javascript error, function not defined when it is clearly defined

所以,我有一个页面,其中 PHP 脚本回显了我所有的 HTML,包括一些 javascript。 The javascript function in question is supposed to be executed when a select box is changed but everytime I change the select box I get an error in my javascript console saying that the function is undefined.

我什至将 function 缩减为仅显示一个警告框以帮助调试,但我仍然遇到错误。

这是负责创建 select 框的 PHP function :

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;
}

完全没有必要将它放在 function 中,但我需要稍微修改另一个类似的 function 已经到位,所以请不要对我太失望!

这是回显的 javascript function:

echo '<script type="text/javascript">';
echo 'function test()';
echo '{';
echo 'alert("hello world");';
echo '}';
echo '</script>';

javascript 在 PHP 文件的底部回显。 我也尝试将它移到顶部,但这并没有改变任何东西。

编辑:感谢大家的回复,您的所有建议都非常有帮助。 我找出了问题所在,并且多达两件事出了问题。 第一个问题是我的浏览器(我认为无论如何)正在缓存我的 javascript,所以我的 function 的旧版本错误版本被调用,这就是为什么一个完美的 function 出现错误的原因。 通过清除我的缓存解决。

另一个问题(我认为)是 javascript function 实际上在执行之前没有被加载。 我通过将 javascript 放在单独的 .JS 文件中并将其链接到 .PHP 文件来解决这个问题。

它似乎在这里工作得很好:

PHP: http://codepad.org/CGY47E1G

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

您的代码片段看起来很可靠(尽管我会在您的回声末尾添加换行符以使结果更具可读性)。 您的 javascript 中的其他地方可能有错误,这会阻止您的 function 被加载。

您应该使用HEREDOC来生成 javascript。 它为您省去了 escaping 所有内部报价的麻烦。 如果您不插入 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 模式。 任何体面的语法高亮编辑器都将能够识别 javascript 并对其进行适当的着色。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM