【问题标题】:JQuery and JQuery.Validate "Unable to get property 'call' of undefined or null reference" errorJQuery 和 JQuery.Validate “无法获取未定义或空引用的属性‘调用’”错误
【发布时间】:2015-07-22 14:48:25
【问题描述】:

我有一个使用 JQuery v1.10.2 和 JQuery.Validate v1.13.1 的 ASP.NET MVC 5 应用程序,当通过单击“提交”验证表单或验证输入时,我在 Chrome 中收到以下错误失去焦点后:

并且 Internet Explorer 也给了我同样的错误。

我正在使用捆绑系统将不同的脚本捆绑在一起,并在另一个项目中进行维护(该项目在应用程序之间共享,使代码可在一个地方维护)。我的捆绑包如下所示:

BundleTable.Bundles.Add(new ScriptBundle(BundleNames.JavaScript.JQuery).Include(
                    string.Format("~/{0}/jquery-1.10.2.js",_JavaScriptFolder""),
                    string.Format("~/{0}/jquery-1.10.2.min.js",_JavaScriptFolder),
                    string.Format("~/{0}/jquery-migrate-1.2.1.js",_JavaScriptFolder),
                    string.Format("~/{0}/jquery-migrate-1.2.1.min.js",_JavaScriptFolder)));

BundleTable.Bundles.Add(new ScriptBundle(BundleNames.JavaScript.JQueryValidation).Include(
                string.Format("~/{0}/jquery.validate.js",_JavaScriptFolder),
                string.Format("~/{0}/jquery.validate.min.js",_JavaScriptFolder),
                string.Format("~/{0}/jquery.validate.unobtrusive.js",_JavaScriptFolder),
                string.Format("~/{0}/jquery.validate.unobtrusive.min.js",_JavaScriptFolder),
                string.Format("~/{0}/jquery.validate-vsdoc.js", _JavaScriptFolder)));

它们会像这样被包含到应用程序布局视图中:

    @Scripts.Render(Ebi.Mvc.Library.Bundling.BundleNames.JavaScript.JQuery)    
    @Scripts.Render(Ebi.Mvc.Library.Bundling.BundleNames.JavaScript.JQueryValidation)

当使用 JQuery v1.9.1 和 JQuery.Validate v1.10.0 时,此设置运行良好,但我必须更新 JQuery.Validate,并且我还决定更新 JQuery(由于 IE 兼容性原因,我避免使用 2.X ),但从那以后我一直被这个错误困扰。我什至尝试过改回可以正常工作的原始版本,但奇怪的是错误仍在发生。

我查看了this question (which seems practically identical) 的答案,并使用 NuGet 包管理器安装了 JQuery Migrate 插件,并将它添加到 JQuery 包中,但似乎所做的只是停止抛出错误包含已加载表单的页面。

我还要补充一点,在抛出错误后,表单上仍会进行验证(例如,将验证类添加到输入并显示输入错误)。

谁能帮我弄清楚是什么导致了这个错误?

【问题讨论】:

  • 你从来没有提到过unobtrusive-validation 插件,它通常用于帮助在ASP 中初始化jQuery Validate。
  • 应该同时使用每个脚本的缩小版和未缩小版...只使用其中一个。
  • 感谢您对缩小和未缩小版本的建议,我会注意的。关于unobtrusive-validation 插件,它使用的是哪个 .js 文件?我有一个jquery.unobtrusive-ajax.js 及其缩小版,还有我上面的问题jquery.validate.unobtrusive.js 中的捆绑代码sn-p 中列出的那个

标签: jquery asp.net-mvc jquery-validate unobtrusive-validation


【解决方案1】:

在我的场景中,Sparky 所说的使用同一脚本的缩小版和非缩小版实际上是导致问题的原因。

为了解决这个问题,我将我的捆绑包分成缩小版和非缩小版,如果需要,这两种类型都可以在我的应用程序中使用。

BundleTable.Bundles.Add(new ScriptBundle(BundleNames.JavaScript.JQuery).Include(
                        string.Format("~/{0}/jquery-1.9.1.js",_JavaScriptFolder)));

BundleTable.Bundles.Add(new ScriptBundle(BundleNames.JavaScript.JQueryMin).Include(
                        string.Format("~/{0}/jquery-1.9.1.min.js", _JavaScriptFolder)));

BundleTable.Bundles.Add(new ScriptBundle(BundleNames.JavaScript.JQueryValidation).Include(
                        string.Format("~/{0}/jquery.validate.js",_JavaScriptFolder),
                        string.Format("~/{0}/jquery.validate.unobtrusive.js",_JavaScriptFolder)));

BundleTable.Bundles.Add(new ScriptBundle(BundleNames.JavaScript.JQueryValidationMin).Include(
                        string.Format("~/{0}/jquery.validate.min.js",_JavaScriptFolder),
                        string.Format("~/{0}/jquery.validate.unobtrusive.min.js", _JavaScriptFolder)));

由于这样做,我能够更新 JQuery.Validate 插件而不会发生错误。最后我什至不必使用 JQuery Migrate 插件。

所以我猜如果其他人收到此错误,值得检查一下您是否同时引用了 JQuery 和 JQuery Validate 脚本的缩小版和未缩小版。

我仍然没有答案的另一半令人困惑的一点是,捆绑包(如我的问题描述中的编码)以这种方式设置了一年多,没有发生任何错误,并且多个应用程序已经使用直到我尝试更新插件...

【讨论】:

  • 如果您不小心将“jquery.validate-vsdoc.js”与常规验证文件一起包含,也会出现同样的问题。
【解决方案2】:

应该将精度添加到这些解决方案中,因为它们不适用于 MVC4。我遇到了这种情况,并尝试了这些答案但没有成功。当我使用 Nuget 添加这些 jquery-migrate 文件并直接在 html 页面中添加这些文件的引用或添加到 BundleConfig 中的 jquery 包时没有任何成功。经过几个小时的尝试,我终于明白,最好在给定页面或给定布局的头部使用捆绑包,而不是在 html 文档中使用已知文件的引用。我刚刚将样式和 javascript 文件的链接更改为类似于下面的代码,它们已经生成了页面所需的链接。

   @Scripts.Render("~/bundles/jquery")
  @Scripts.Render("~/bundles/jqueryui")
   <script type="text/javascript" src="~/Scripts/jquery.validate-vsdoc.js"></script>
   @Scripts.Render("~/bundles/jqueryval") 

通过这样做,我成功了,不再有这个错误。

如果上面的jqueryval上没有添加,则无法进行验证

【讨论】:

    【解决方案3】:

    由于我没有使用下面的参考,它已通过添加解决:

    <script type="text/javascript" src="jquery-migrate-1.2.1.min.js"></script>
    

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 2020-04-28
      • 2016-08-16
      相关资源
      最近更新 更多