使用jquery 1.9的MVC 4项目中的jquery.validate.js出错

使用jquery 1.9的MVC 4项目中的jquery.validate.js出错,jquery,jquery-validate,unobtrusive-validation,Jquery,Jquery Validate,Unobtrusive Validation,我使用VisualStudio2012中的模板创建了一个新的ASP.NETMVC4项目。升级到jQuery 1.9后,登录功能中断。具体来说,我得到了错误 0x800a138f-JavaScript运行时错误:无法获取未定义或空引用的属性“call” 在jquery.validate.js的第1172行第5列 如何修复此问题?此问题已在jQuery验证插件1.11.0pre中修复 不幸的是,目前在NuGet上没有预发布版本,因此目前有必要直接从GitHub下载jquery.validation.

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

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

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

如何修复此问题?

此问题已在jQuery验证插件1.11.0pre中修复

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

现在可以通过NuGet获得(谢谢@Simon_Weaver)

更新

jQuery.Validation代码库中似乎有对jQuery 1.9的一般支持,但尚未发布


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

我找到了一个解决方案: 替换

@节脚本{
}

潜在的问题是,一些自jQuery 1.7(添加了新的改进方法)以来就被弃用的方法在1.9中被删除了。显然,jqueryvalidate尚未更新,因此它使用了新方法。我发现使用jQuery迁移插件(将删除的方法放回)解决了我的问题。

这里是另一个解决方案:

我在jQuery1.71和jQueryUI1.8.20中使用了MVC3。我使用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>*

*

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

如果您安装jQuery.Migrate 1.1.1,那么它可以在jQuery.Validation 1.11、jQuery 1.9和2.x中正常运行

除了执行
安装包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

用下面的行替换bundles脚本路径对我很有效

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


我尝试通过Nuget更新jquery验证,并将jquery更新为2.0版本,但这些解决方案都不起作用。唯一一个在不下载任何预版本的情况下运行良好的解决方案是Texellab提出的解决方案。问题是验证脚本中的代码行

$.event.handle.call(this,e);
这里的问题在于
$.event.handle
this
e
都有正确的值。根据迁移脚本,jQuery不推荐使用$.event.handle,而支持jQuery.event.dispatch

修复这些错误就像简单地用分派替换要处理的引用一样简单

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

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

根据,该插件的1.10版只通过jQuery 1.8.x进行了测试。现在可以通过Nuget获得该插件-我可以确认它修复了问题,使用jQuery 1.9和jQuery.validation 1.11,仍然得到smae错误。@bbqchickenrobot:我只能验证这在jQuery 1.8.x中是否有效。jQuery1.9删除了许多以前折旧过的方法。许多第三方库因此破产。@EricJ。嘿,埃里克,这不是正确的答案,因为它不能解决问题。因为它还不支持jQuery 1.9/2.0,所以您必须使用jQuery迁移插件。@Stony:我在回答中添加了一个词,希望能减少您遇到的困惑。+1我发现迁移到jQuery-2.0.3时也遇到了同样的问题。这把它修好了。令人惊讶的是,jquery验证尚未修复。在我的情况下,我必须将其添加到由VisualStudio自动添加的捆绑包“~/bundle/jqueryval”,如果您使用MVC Internet模板。所以,注意看外面!快乐编码。这应该是正确的答案。只是更新jQuery.validation 1.11不起作用,但您的解决方案对我有效。Davidson,但我在布局页面中声明该脚本。。如何在我的部分页面上对此进行评论?我非常希望这对我有用,但它没有。我正在使用jquery 3.1.1、jquery ui 1.12.1和jquery.validate 1.15.1。直到我引入jquery ui并使用捆绑,这个问题才出现。这是我的第二个选择,但对我来说也不起作用(
$.event.handle.call(this,e);
$(function(){
    jQuery.event.handle = jQuery.event.dispatch
});