【问题标题】:'return' statement outside of function in IE 10 and IE 11IE 10 和 IE 11 中函数外的“return”语句
【发布时间】:2014-10-28 00:42:27
【问题描述】:

我有一个下面的asp控件

<asp:Button ID="btnSave" onclick="return validate();"
                            runat="server" Text="submit" CssClass="next" />

下面是js函数Validate

function Validate()
{if (some condition){return true} else return false;  } 

此代码在 IE10 和 IE11 以外的所有浏览器中都可以正常工作 该函数始终返回一个值。但是当我在 IE11 或 10 中调试时,我遇到了问题 函数执行后的“函数外的'return'语句”。

真正的原因可能是什么?

好吧,我正在编辑这个问题,因为我刚刚知道这个问题是另外一回事。 我在 IE 的 Add Watch 中使用了完整的语句“return Validate()”来查看实际值,并且在函数之外得到了错误“return”语句”。当我只尝试使用“Validate()”时,我得到了“true” ' 作为它的值。函数根据条件返回正确的值 true 或 false,但我在 IE10 或 IE11 中遇到的实际问题是,即使在 Validate 函数的返回值为 true 之后,我的表单也没有提交到服务器。 有什么想法吗?

【问题讨论】:

  • 通过“查看源代码”在浏览器中查看代码会很有帮助。在纯 HTML 中,事件处理程序属性的值总是隐式包装在函数体中。
  • 你可能会因为专注于“if else”而走错了路。这可能是真正的原因。

标签: javascript asp.net internet-explorer-10 internet-explorer-11


【解决方案1】:

在您的情况下,您的代码中不需要 else part

function Validate() {
     if (some condition) {
        return true;
     } 
     return false;  
} 

还可以通过添加; 来终止return true 行。

或者

简写方式是

 function Validate() { 
     return ((some condition) ? true : false); 
 } 

感谢@pholpar 的建议。

【讨论】:

  • 使用 function Validate() { return (some condition) } ?? 还不够
  • @pholpar 我认为,如果假设不满足条件时该函数不返回任何内容。该函数将返回undefined 不是吗?为避免这种情况,我们需要在函数中添加return false; 语句。
  • 我的函数只包含一个返回语句(根本没有 if 块),所以只要(某些条件)评估为布尔值(因为它应该用于 if原始版本中的块),无法返回无法解释为布尔值的内容。如果(某些条件)未定义,它将被解释为错误的布尔值。
  • 如果你真的想显式返回 true 或 false,即使 'some condition' 是一个未定义的表达式,你也可以使用这个版本: function Validate() { return ((some condition) ? true : 错误的); }
  • @pholpar 谢谢你,我在回答时完全忘记了这一点,我将把它更新为速记方式(编辑)。
【解决方案2】:

我认为问题是由于在您的 onclick 处理程序中未使用匿名方法引起的,例如:

<asp:Button ID="btnSave" onclick="function(){return validate();};"runat="server" Text="submit" CssClass="next" />

this answer,或this one here

此外,您可以将 Validate 方法简化为:

function Validate() { 
  return (some condition);
 } 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-31
    • 2014-04-25
    • 2016-08-13
    • 2017-12-08
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2013-12-01
    相关资源
    最近更新 更多