JQuery 和 JQuery.Validate "Unable to get property 'call' of undefined or null reference" 错误
JQuery and JQuery.Validate "Unable to get property 'call' of undefined or null reference" error
我有一个 ASP.NET MVC 5 应用程序正在使用 JQuery v1.10.2 和 JQuery.Validate v1.13.1,我在 Chrome 中收到以下错误通过单击 "Submit" 或在失去焦点后验证输入时验证表单:
并且 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 包中,但这一切似乎要做的是停止在加载包含表单的页面后立即抛出错误。
我还要补充一点,在抛出错误后,验证仍然在表单上进行(例如,将验证 类 添加到输入并显示输入错误)。
任何人都可以帮我找出导致此错误的原因吗?
在我的场景中,事实证明,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 验证脚本的缩小版和未缩小版。
令我感到困惑的一点是,我仍然没有答案,因为捆绑包(如我的问题描述中编码的那样)已经设置了一年多,从未发生过任何错误,并且多个应用程序都有使用它,直到我尝试更新插件...
应该将精度添加到这些解决方案中,因为它们不适用于 MVC4。我遇到过这种情况,但没有成功地尝试过这些答案。当我使用 Nuget 添加这些 jquery-migrate 文件并直接在 html 页面或 BundleConfig 中的 jquery 包中添加这些文件的引用时,没有任何成功。经过几个小时的尝试,我终于明白在给定页面或给定布局的头部使用包比在 html 文档中使用已知文件的引用更好。我刚刚将 link 样式和 javascript 文件更改为类似于下面的代码,它们已经生成了页面所需的 link。
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
<script type="text/javascript" src="~/Scripts/jquery.validate-vsdoc.js"></script>
@Scripts.Render("~/bundles/jqueryval")
通过这样做,我成功了,不再有这个错误。
如果不在上面添加jqueryval,则无法执行验证
由于我没有使用以下参考资料,因此已通过添加解决:
<script type="text/javascript" src="jquery-migrate-1.2.1.min.js"></script>
我有一个 ASP.NET MVC 5 应用程序正在使用 JQuery v1.10.2 和 JQuery.Validate v1.13.1,我在 Chrome 中收到以下错误通过单击 "Submit" 或在失去焦点后验证输入时验证表单:
并且 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 包中,但这一切似乎要做的是停止在加载包含表单的页面后立即抛出错误。
我还要补充一点,在抛出错误后,验证仍然在表单上进行(例如,将验证 类 添加到输入并显示输入错误)。
任何人都可以帮我找出导致此错误的原因吗?
在我的场景中,事实证明,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 验证脚本的缩小版和未缩小版。
令我感到困惑的一点是,我仍然没有答案,因为捆绑包(如我的问题描述中编码的那样)已经设置了一年多,从未发生过任何错误,并且多个应用程序都有使用它,直到我尝试更新插件...
应该将精度添加到这些解决方案中,因为它们不适用于 MVC4。我遇到过这种情况,但没有成功地尝试过这些答案。当我使用 Nuget 添加这些 jquery-migrate 文件并直接在 html 页面或 BundleConfig 中的 jquery 包中添加这些文件的引用时,没有任何成功。经过几个小时的尝试,我终于明白在给定页面或给定布局的头部使用包比在 html 文档中使用已知文件的引用更好。我刚刚将 link 样式和 javascript 文件更改为类似于下面的代码,它们已经生成了页面所需的 link。
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
<script type="text/javascript" src="~/Scripts/jquery.validate-vsdoc.js"></script>
@Scripts.Render("~/bundles/jqueryval")
通过这样做,我成功了,不再有这个错误。
如果不在上面添加jqueryval,则无法执行验证
由于我没有使用以下参考资料,因此已通过添加解决:
<script type="text/javascript" src="jquery-migrate-1.2.1.min.js"></script>