使用jQuery 1.9的MVC 4 Project中的jquery.validate.js错误

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

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

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

我该如何解决这个问题?

这个问题在jQuery Validation Plugin 1.11.0pre中修复

不幸的是,目前在NuGet上没有预发布版本,所以目前有必要直接从GitHub下载jquery.validation.js:

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

UPDATE

它看起来像jQuery 1.9的一般支持是在jQuery.Validation代码库,但尚未发布

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

如果你安装了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 

问题是validation脚本中的代码行

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

这里的问题是$.event.handlethise都有适当的价值。 根据迁移脚本http://code.jquery.com/jquery-migrate-1.2.0.js,jQuery不推荐使用$ .event.handle来支持jQuery.event.dispatch。

修复这些错误就像简单地用派发来replace句柄一样简单。

这可以包装在一个document.readycallback,以确保在其他脚本运行后运行。

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

我有同样的问题,在Firefox中没有问题,但ie仍然给出了错误。 我正在使用jquery-2.0.0; jQueryvalidation插件1.11.1

我发现了一个修复:replace

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

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

用下面的代码replacebundle脚本path为我工作。

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

我试图通过Nuget更新jqueryvalidation,并更新jquery到2.0版本,但没有解决scheme。 唯一一个没有下载任何东西的工作正常的版本是Texellab提出的解决scheme

根本的问题是,自从jQuery 1.7(当新的,改进的方法被添加时)被弃用的一些方法在1.9中被删除。 jQuery Validate显然没有被更新,所以它使用了新的方法。 我发现使用jQuery Migrate Plugin(将删除的方法放回)解决了我的问题。

这是另一个解决scheme:

我用MVC 3与jQuery 1.71和jQuery UI 1.8.20。 我使用了jQuery UI Tabs小部件,并设置每个选项卡区域以加载包含input字段的部分页面。

在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>* 

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