无法获得名为"switch"的Javascript函数来执行

Ada*_*dam 1 javascript

我有一个简单的脚本,应该导致三个div中的一个可见,而其他两个不是.执行工作的函数调用如下:

onchange="switch(this);"
Run Code Online (Sandbox Code Playgroud)

Firebug表示此文本出错:

Javascript Error: missing { before switch body
Run Code Online (Sandbox Code Playgroud)

它指示的错误代码是我的.php文件中的第一行,其中doctype的定义如下:

<!doctype html>
Run Code Online (Sandbox Code Playgroud)

这里有趣的是,我有另一个页面具有相同的doctype和一个几乎完全相同的脚本100%工作.这两个页面之间的唯一区别是,在一个有效的方法中,我从中调用脚本

关于Firebug输出的另一件事:在可行的页面上,firebug脚本窗口显示如下的javascript:

function onclick(event) {
    switch(this);
}
Run Code Online (Sandbox Code Playgroud)

现在,在脚本不起作用的页面上,Firebug没有显示与onchange,onclick或其他任何内容有关的输出.它只是显示我的javascript文件中的代码,并告诉我,当它显示在那里时,我正在错过函数的开始括号.也许,即使我的主要php文件的头部中的脚本,范围发生了奇怪的事情,使得定义的函数对调用者不可见.有任何想法吗?

1:为什么Firebug告诉我错误是在第1行,其中当失败的函数甚至不在同一个文件中时定义了doctype?

2:doctype是否会影响javascript的运行方式,如果是这样,我该如何调试呢?

我宁愿继续只为这个项目使用HTML5,并使用javascript文件向后兼容.非常欢迎任何帮助!

PS我正在使用Apache2,PostgreSQL和PHP5运行Ubuntu 11.10.除了这个javascript问题之外,一切都完美无缺.

编辑:完全愚蠢的问题,但我猜这些事情有时会发生.如答案中所述,switch是Javascript中的关键字,更改我的函数名称解决了问题.我真的应该注意到,因为我的编辑突出了褐色的关键词...

我没有删除这篇文章(除非有人建议我这样做)以防其他人遇到同样的问题.我给出了首先回答它的人的答案,因为他的回答也解释了我收到错误信息的原因,从长远来看,这可能比简单的switch语句意识更有帮助.

Dom*_*nic 7

此错误与您的doctype或HTML5无关.这是因为switch是用于switch语句的保留字; 你不能命名一个功能switch.

因此,当您执行switch(this)JavaScript引擎时,期望您使用switch语句的其余部分(包括{开关,开关主体,然后关闭)来跟进它}.当你不这样做时,它会抛出给定的错误.

错误在"第1行",因为您使用了内联事件处理程序,在Firebug的脑海中是一个带有一行的JavaScript文件---该行就是这样switch(this);.Firebug不处理HTML文件的行数,只处理JavaScript文件的行数 - 无论它们是真正的JavaScript文件,还是由内联事件处理程序生成的"虚拟"文件.