javascript - 无法执行名为 "switch"的 Javascript 函数

标签 javascript

我有一个简单的脚本,可以使三个 div 之一可见,而其他两个不可见。完成工作的函数是这样调用的:

onchange="switch(this);"

Firebug 指示此文本有错误:

Javascript Error: missing { before switch body

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

<!doctype html>

这里有趣的是,我有另一个具有相同文档类型的页面和一个几乎完全相同且 100% 有效的脚本。两个页面之间的唯一区别是,在有效的页面中,我从

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

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

现在,在脚本不起作用的页面上,Firebug 不会显示与 onchange、onclick 或其他任何内容有关的输出。它只显示我的 javascript 文件中的代码,并告诉我我缺少该函数的左括号,而当它在那里时一目了然。也许,即使脚本位于我的主 php 文件的头部,作用域也会发生一些奇怪的事情,使得定义的函数对调用者不可见。有什么想法吗?

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

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

我宁愿继续在该项目中仅使用 HTML5,并使用 javascript 文件实现向后兼容性。非常欢迎任何帮助!

附言我正在运行带有 Apache2、PostgreSQL 和 PHP5 的 Ubuntu 11.10。除了这个 javascript 问题之外,一切都完美无缺。

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

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

最佳答案

此错误与您的文档类型或 HTML5 无关。这是因为 switch 是用于 switch statements 的保留字;您不能将函数命名为 switch

因此,当您执行 switch(this) 时,JavaScript 引擎希望您跟进 switch 语句的其余部分,包括开头的 {,switch正文,然后是结束 }。如果您不这样做,它会抛出给定的错误。

错误出现在“第 1 行”,因为您使用了内联事件处理程序,在 Firebug 的脑海中,它是一个只有一行的 JavaScript 文件——该行只是 switch(this);。 Firebug 不处理 HTML 文件的行号,只处理 JavaScript 文件的行号——无论它们是真实的 JavaScript 文件,还是由内联事件处理程序生成的“虚拟”文件。

关于javascript - 无法执行名为 "switch"的 Javascript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8032678/

相关文章:

javascript - 如何在列表中添加删除按钮?

javascript - 如何制作超过 5 个输入的松弛对话? Node 松弛API

javascript - 将 img 元素在 dom 上移动以显示多个博客文章

javascript - 我可以将 ajax 放在 React 组件构造函数中吗?

javascript - 如何使脚本在窗口大小调整时重新运行?

javascript - 如何防止空输入?

javascript - 表格行未在 Cordova/Phonegap 中水平显示

javascript - window.open 在 Windows Phone 8 上返回 null

jquery - 在嵌套函数中传递父函数参数?

javascript - 调用两个异步函数之一,但不能同时调用两个