【问题标题】:Knockout validation error in Internet Explorer?Internet Explorer 中的敲除验证错误?
【发布时间】:2013-02-27 08:45:17
【问题描述】:

在我看来,使用 knockout 和应该是 knockout validation 我添加以下行(实际开始使用 ko 验证):

<script src="@Url.Content("~/Scripts/knockout.validation.debug.js")" type="text/javascript"></script>
  • 当我在 Chrome 中运行此视图时,验证工作正常。
  • 当我在 IE (9.0) 中运行此视图时,我收到非常丑陋的消息,内容如下:

0x800a138f - Microsoft JScript 运行时错误:无法获取属性“规则”的值:对象为空或未定义。

(在 SO 上的未来搜索文本中)点击“继续”后,它运行良好,验证似乎运行良好。就是这条信息。

值得一提的是,我搜索了解决方案 - 我没有在任何地方使用“规则”。 不知道 IE 发生了什么。

有人知道为什么会发生这种情况以及如何消除错误吗?

【问题讨论】:

  • 错误在knockout.validation.debug.js的第70行,我想看看。我下载了不同版本的 Knockout Validation -- 你能上传你的 knockout.validation.debug.js 副本吗?
  • @EvanHahn 好的,谢谢。这里是:pastebin.com/GECfEpht

标签: asp.net-mvc internet-explorer knockout.js knockout-validation knockout-mvc


【解决方案1】:

简短回答:看起来the new version of Knockout Validation 解决了这个问题。更新您的 Knockout Validation 以解决此问题并忘记这一切。

更长的答案:错误来自名为isValidatable 的内部实用程序方法中的错误。这是从源代码复制粘贴的:

isValidatable: function (o) {
    return o.rules && o.isValid && o.isModified;
}

有人调用isValidatable,其中o 是“null 或未定义”,如错误所示。如果一个对象甚至不是一个对象,它就是不可验证的!在这种情况下,我们遇到了一个错误,因为我们正在寻找 o.rules,这将引发错误,因为 o 未定义或为空。

The new version of Knockout Validation 这样做:

isValidatable: function (o) {
    return o && o.rules && o.isValid && o.isModified;
},

如果对象存在,则第一个子句返回 true(从技术上讲,它返回 o,计算结果为 true)。如果对象不存在,如果o 未定义,它会返回而不会出错。

如果你好奇,here's the commit that fixed the bug you're experiencing

【讨论】:

  • 我看到那条线我不知道是谁在打电话,因为我不使用任何rules ...但对简短回答的简短回应:让我试试。但这真的很奇怪,因为我在 6 小时前第一次安装了淘汰赛验证。无论如何,让我试试。我会回来的
  • rules 问题来自 Knockout Validation 中名为 rules 的内部变量。
  • NuGet 没有给我更新,怎么会?我应该从github.com/ericmbarnard/Knockout-Validation/blob/master/Src/… 复制粘贴文件吗?
  • 我觉得这是他们使用的内部rules,但是他们怎么能发布这种把东西扔给无辜用户的代码呢? :) 非常感谢埃文!
猜你喜欢
  • 2012-11-23
  • 1970-01-01
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 2011-06-23
  • 1970-01-01
  • 2012-05-30
相关资源
最近更新 更多