我创建了一个新的ASP。Net MVC 4项目中使用的模板。升级到jQuery 1.9后,登录功能中断。具体来说,我得到错误
0x800a138f-JavaScript运行时错误:无法获取未定义或空引用的属性"call"
在jquery.validate.js 的第5列1172行
如何解决此问题?
此问题已在jQuery验证插件1.11.0pre中修复。
不幸的是,目前NuGet上没有预发布版本,因此目前需要直接从GitHub下载jquery.validation.js:
jQuery。验证1.11现在可以通过NuGet获得(感谢@Simon\uWeaver)。
更新
jQuery中似乎有对jQuery 1.9的通用支持。验证代码库,但尚未发布
https://github.com/jzaefferer/jquery-validation/pull/613
如果安装jQuery。迁移1.1.1,那么它将与jQuery一起正常工作。验证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
。CCD_ 3和CCD_。根据迁移脚本,jQuery反对使用$.event.handle而支持jQuery.event.dispatchhttp://code.jquery.com/jquery-migrate-1.2.0.js.
修复这些错误就像简单地用dispatch替换要处理的引用一样简单。
这可以封装在document.ready回调中,以确保它在其他脚本运行后运行。
$(function(){
jQuery.event.handle = jQuery.event.dispatch
});
我遇到了同样的问题,在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>
}
用以下行替换bundles脚本路径对我很有效。
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryval")"></script>
我尝试通过Nuget更新jquery验证,并将jquery更新到2.0版本,但这些解决方案都不起作用。唯一一个在没有下载任何预版本的情况下运行良好的是Texellab 提出的解决方案
潜在的问题是,自jQuery 1.7(添加了新的改进方法)以来一直不推荐使用的一些方法在1.9中被删除。jQueryValidate显然没有更新,所以它使用了新的方法。我发现使用jQuery迁移插件,它将删除的方法放回原处,解决了我的问题。
这里有另一个解决方案:
我将MVC 3与jQuery 1.71和jQuery UI 1.8.20一起使用。我使用jQueryUITabs小部件并设置每个选项卡区域来加载包含输入字段的部分页面。
在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>*
它现在在所有浏览器中都能成功工作。