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



我创建了一个新的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>*

它现在在所有浏览器中都能成功工作。

相关内容

  • 没有找到相关文章

最新更新