使用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代码库,但尚未发布
如果你安装了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.handle
。 this
和e
都有适当的价值。 根据迁移脚本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>*
它现在可以在所有浏览器中成功运行。