我遇到了这个错误!['return'语句在函数外面]

10

我正在为客户创建一个表单验证器,在Internet Explorer 7/8中遇到了这个奇怪的错误,其他浏览器均无此问题:

在函数外面的return,第1行,第1列

当然,第一行根本没有任何代码。它只是一个简单的注释语句,而且没有任何问题。因此我知道这只是一个调试错误。

我已经排除了一些显而易见的问题:循环语句中的return、单个函数中太多的return和任何在非法函数定义之外的返回。

这是什么原因呢?


2
通常这意味着字面上的意思——你在任何函数之外有一个返回语句。提供示例代码会更有帮助... - HurnsMobile
1
也许提供一些源代码可以帮助我们更好地帮助您? - jball
一个代码示例会很有帮助。仅凭错误信息无法确定您的代码中的错误。 - riwalk
4个回答

15

问题在于我使用了一个返回语句来覆盖表单的默认行为,并将其赋值给一个属性,但是它没有放在一个匿名函数内部!

我有一个设置如下的表单元素:

<form name="formname" onSubmit="javascript:validateForm(this);" action="javascript:return false;" method="post" enctype="multipart/form-data">

我只需要将action属性更改为这个:

action="javascript:function(){return false};"

现在它完美无缺地运行!


5
javascript:类型的URL非常不好,尤其是在action上不要使用。如果对于非JS用户真的没有有用的表单提交地址,你可以给它一个无用的动作,比如#,并使用onsubmit="return false"来阻止表单提交(不需要在事件处理程序上添加javascript:前缀,因为它们不是URL;包括它什么也做不了)。或者,如果您不需要将仅限于脚本的表单字段与任何提交位置相关联,那么可以省略表单标签。 - bobince
1
抱歉,在一些浏览器中,哈希符号“#”会生成额外的HTTP请求,这应该避免。特别是谷歌公司已经开始在意页面加载速度。此信息是为了让人们知道,将return用于函数之外的任何地方都会导致IE抛出错误。无论在哪个属性中使用"return",它都需要被封闭在一个函数内:匿名或其他。通过返回false,您可以防止浏览器执行其默认行为。它适用于所有浏览器。包括“javascript:”部分只是良好的实践:它确保正确的代码类型。 - exoboy
1
@bobince是正确的,不要使用javascript:。改用onsubmit="return validateForm(this);"validateForm只需要返回false即可阻止表单提交。onsubmit已经期望JavaScript,所以不需要javascript:。那么为什么不将操作留空呢?不需要#。 - roberkules
2
exoboy的回答有点误导性。action="javascript:function(){return false};"阻止提交表单的原因不是return false部分。您可以使用javascript:function(){return true};javascript:function(){return 'pants'};javascript:var foobar;javascript:void(0);来实现相同的阻止效果。只是想指出这段代码有点误导性。它阻止了表单提交,因为javascript:代码什么也没做,也没有返回任何内容,而不是声明一个函数并在运行时返回false。 - Mike Clark
1
代码并不会误导。它是为了任何可能不允许空函数的浏览器而存在,无论现在还是将来。它被设计成强大而稳健,而不是尽可能小的代码... - exoboy

1

检查以确保您的函数参数中没有写入“var”。

在许多语言中,您必须指定参数类型。 在JavaScript中,您不必这样做。


也许你应该详细说明一下省略 var 如何帮助 OP 的 return - dakab

1
有时候,当你在编写需要用户启用 JavaScript 才能使用的后端系统时,我觉得使用 javascript: href 标签是可以接受的,因为系统的使用本来就需要 JavaScript。
在这种情况下,使用 href="javascript:" 没有什么问题,对吧?

0

我在使用ModalPopupExtender时遇到了这个错误。我已经指定了以下属性:

OnOkScript="return false;"

设置 OkOkScript="" 对我解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接