【问题标题】:Error in jquery.validate.js in MVC 4 Project with jQuery 1.9使用 jQuery 1.9 的 MVC 4 项目中的 jquery.validate.js 出错
【发布时间】:2013-02-02 05:43:12
【问题描述】:

我使用 Visual Studio 2012 中的模板创建了一个新的 ASP.Net MVC 4 项目。升级到 jQuery 1.9 后,登录功能中断。具体来说,我得到了错误

0x800a138f - JavaScript 运行时错误:无法获取未定义或空引用的属性“调用”

jquery.validate.js 中的第 1172 行第 5 列

我该如何解决这个问题?

【问题讨论】:

标签: jquery jquery-validate unobtrusive-validation


【解决方案1】:

此问题已在 jQuery Validation Plugin 1.11.0pre 中得到修复。

很遗憾目前在 NuGet 上没有预发布版本,所以目前需要直接从 GitHub 下载 jquery.validation.js:

jQuery.Validation 1.11 现在可以通过 NuGet 获得(感谢 @Simon_Weaver)。

更新

看起来对 jQuery 1.9 的 general 支持在 jQuery.Validation 代码库中,但尚未发布

https://github.com/jzaefferer/jquery-validation/pull/613

【讨论】:

  • 现在可以通过 Nuget 获得 - nuget.org/packages/jQuery.Validation/1.11.0 我可以确认它解决了问题
  • 奇怪,使用 jquery 1.9 和 jquery.validation 1.11 仍然出现 smae 错误。
  • @bbqchickenrobot:我只能验证这适用于 jQUery 1.8.x。 jQuery 1.9 删除了一些以前贬值的方法。许多第三方库因此崩溃。
  • @EricJ。嘿埃里克,这不是正确的答案,因为它不能解决问题。因为还不支持jQuery 1.9/2.0,所以必须使用jQuery Migrate插件。
  • @Stony:我在回答中添加了一个词,希望能减少您遇到的困惑。
【解决方案2】:

如果您安装 jQuery.Migrate 1.1.1,那么它将与 jQuery.Validation 1.11、jQuery 1.9 和 2.x 一起正常工作。

除了install-package jQuery.Migrate,您还必须将 JavaScript 添加到 BundleConfig.cs - 我在 jQuery 之后添加它,这就是注册 jQuery 的行现在的样子:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
  "~/Scripts/jquery-{version}.js",           // jQuery itself
  "~/Scripts/jquery-migrate-{version}.js")); // jQuery migrate

【讨论】:

  • +1 我在迁移到 jquery-2.0.3 时发现了同样的问题。这解决了它。令人惊讶的是,jquery validate 尚未修复。
  • 在我的例子中,我必须将它添加到包“~/bundle/jqueryval”中,如果您使用 MVC Internet 模板,则由 VisualStudio 自动添加。所以,注意那里的窥视!编码愉快。
  • +1。这应该是正确的答案。只是更新 jQuery.validation 1.11 没有用,但你的解决方案对我有用。
【解决方案3】:

问题在于验证脚本中的代码行

$.event.handle.call(this,e);

这里的问题在于$.event.handlethise 都有正确的值。根据迁移脚本http://code.jquery.com/jquery-migrate-1.2.0.js,jQuery 弃用了 $.event.handle 以支持 jQuery.event.dispatch。

修复这些错误就像简单地将要处理的引用替换为调度一样简单。

这可以包装在一个 document.ready 回调中,以确保它在其他脚本运行之后运行。

$(function(){
    jQuery.event.handle = jQuery.event.dispatch
});

【讨论】:

  • 我非常希望这对我有用,但它没有。我正在使用 jquery 3.1.1、jquery-ui 1.12.1 和 jquery.validate 1.15.1。直到我介绍了 jquery-ui 并使用了捆绑,这个问题才出现在我身上。
【解决方案4】:

我遇到了同样的问题,在firefox中没有问题,但ie仍然给出错误。我正在使用 jquery-2.0.0; jQuery 验证插件 1.11.1

我找到了解决办法: 替换

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

@section Scripts{
    <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
}

【讨论】:

    【解决方案5】:

    用以下行替换捆绑脚本路径对我有用。

     <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
    

    我尝试通过 Nuget 更新 jquery 验证,并将 jquery 更新到 2.0 版本,但这些解决方案都没有奏效。唯一一个不用下载任何东西就能正常工作的 Pre version 是 Texellab 提出的解决方案

    【讨论】:

    • 这是我的第二选择,但对我也不起作用。 :(
    【解决方案6】:

    潜在的问题是自 jQuery 1.7 以来已弃用的一些方法(当添加了新的改进方法时)已在 1.9 中删除。 jQuery Validate 显然没有更新,因此它使用新方法。我发现使用 jQuery Migrate 插件将删除的方法重新放入,解决了我的问题。

    【讨论】:

      【解决方案7】:

      这是另一个解决方案:

      我将 MVC 3 与 jQuery 1.71 和 jQuery UI 1.8.20 一起使用。我使用 jQuery UI 选项卡小部件并设置每个选项卡区域来加载包含输入字段的部分页面。

      在 Firefox v22 和 Chrome v28 中运行良好,在 IE10 中失败。我得到的错误是'无法获取未定义或空引用的属性'设置'

      解决办法是转到部分表单并注释掉以下代码:

      <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
      <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
      <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>*
      

      它现在可以在所有浏览器中成功运行。

      【讨论】:

      • 戴维森,但我在布局页面中声明了该脚本。如何在我的部分页面上注释掉这个??
      猜你喜欢
      • 1970-01-01
      • 2013-01-08
      • 2016-05-12
      • 1970-01-01
      • 2013-05-27
      • 2013-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多