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

时间:2011-11-07 04:18:48

标签: javascript

我有一个简单的脚本,应该导致三个div中的一个可见,而其他两个则不可见。执行工作的功能如下所示:

onchange="switch(this);"

Firebug表示此文本出错:

Javascript Error: missing { before switch body

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

<!doctype html>

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

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

function onclick(event) {
    switch(this);
}

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

1:为什么Firebug会告诉我错误是在第1行,当失败的函数即使在同一个文件中时,也会定义doctype?

2:doctype是否会影响javascript的运行方式,如何调整呢?

我更愿意继续仅为此项目使用HTML5,并使用javascript文件向后兼容。非常欢迎任何帮助!

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

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

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

3 个答案:

答案 0 :(得分:7)

此错误与您的doctype或HTML5无关。这是因为switch是用于switch statements的保留字;你不能命名一个函数switch

所以,当你执行switch(this)时,JavaScript引擎希望你跟随switch语句的其余部分,包括开始{,交换机体,然后关闭{{1} }}。当你不这样做时,它会抛出给定的错误。

错误在“第1行”,因为您使用了内联事件处理程序,在Firebug的脑海中是一个带有一行的JavaScript文件---该行只是}。 Firebug不处理HTML文件的行数,只处理JavaScript文件的行数 - 无论它们是真正的JavaScript文件,还是由内联事件处理程序生成的“虚拟”文件。

答案 1 :(得分:1)

switch是javascript中的关键字,将您的函数重命名为myswitch之类的其他内容。

答案 2 :(得分:0)

switch是Javascript中的关键字