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

Eri*_* J. 62 jquery jquery-validate unobtrusive-validation

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

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

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

我该如何解决这个问题?

Eri*_* J. 85

此问题已在jQuery Validation Plugin 1.11.0pre中修复.

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

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

UPDATE

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

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

  • 很奇怪,使用jquery 1.9和jquery.validation 1.11并仍然得到smae错误. (9认同)
  • @EricJ.嘿埃里克,这不是正确的答案,因为它没有解决问题.因为它还不支持jQuery 1.9/2.0,所以必须使用jQuery Migrate插件. (5认同)

Ric*_*ard 37

如果你安装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
Run Code Online (Sandbox Code Playgroud)


Tra*_*s J 10

问题是验证脚本中的代码行

$.event.handle.call(this,e);
Run Code Online (Sandbox Code Playgroud)

这里的问题是$.event.handle.双方thise有正确的价值观.根据迁移脚本http://code.jquery.com/jquery-migrate-1.2.0.js,jQuery弃用了$ .event.handle,转而使用jQuery.event.dispatch .

修复这些错误就像使用dispatch简单地替换handle句柄一样简单.

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

$(function(){
    jQuery.event.handle = jQuery.event.dispatch
});
Run Code Online (Sandbox Code Playgroud)


小智 8

我有同样的问题,在Firefox中没有问题但是仍然给出了错误.我正在使用jquery-2.0.0; jQuery Validation Plugin 1.11.1

我找到了一个修复:替换

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)

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