我使用 Visual Studio 2012 中的模板创建了一个新的 ASP.Net MVC 4 项目。升级到 jQuery 1.9 后,登录功能中断。具体来说,我得到了错误
0x800a138f - JavaScript 运行时错误:无法获取未定义或空引用的属性“调用”
在 jquery.validate.js 中的第 1172 行第 5 列
我该如何解决这个问题?
我使用 Visual Studio 2012 中的模板创建了一个新的 ASP.Net MVC 4 项目。升级到 jQuery 1.9 后,登录功能中断。具体来说,我得到了错误
0x800a138f - JavaScript 运行时错误:无法获取未定义或空引用的属性“调用”
在 jquery.validate.js 中的第 1172 行第 5 列
我该如何解决这个问题?
此问题已在jQuery Validation Plugin 1.11.0pre中得到修复。
不幸的是,目前 NuGet 上没有预发布版本,因此目前需要直接从 GitHub 下载 jquery.validation.js:
jQuery.Validation 1.11现在可以通过 NuGet 获得(感谢@Simon_Weaver)。
更新
jQuery.Validation 代码库中似乎对 jQuery 1.9 的一般支持,但尚未发布
如果您安装 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
问题是验证脚本中的代码行
$.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 。
修复这些错误就像简单地将要处理的引用替换为调度一样简单。
这可以包装在 document.ready 回调中,以确保它在其他脚本运行后运行。
$(function(){
jQuery.event.handle = jQuery.event.dispatch
});
我有同样的问题,在Firefox中没有问题,但即仍然给出错误。我正在使用 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>
}
用以下行替换捆绑脚本路径对我有用。
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
我尝试通过 Nuget 更新 jquery 验证,并将 jquery 更新到 2.0 版本,但这些解决方案都没有奏效。唯一没有下载任何东西就可以正常工作的 Pre version 是 Texellab 提出的解决方案
潜在的问题是自 jQuery 1.7 以来已弃用的一些方法(当添加了新的改进方法时)已在 1.9 中删除。jQuery Validate 显然没有更新,因此它使用了新方法。我发现使用 jQuery Migrate 插件将删除的方法重新放入,解决了我的问题。
这是另一个解决方案:
我将 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>*
它现在可以在所有浏览器中成功运行。