【问题标题】:$('form').validate is Undefined$('form').validate 未定义
【发布时间】:2015-02-27 05:18:19
【问题描述】:

我正在尝试使用文章Create a Wizard in ASP.NET MVC 3 中描述的技术在 MVC 中实现一个向导。 (我使用的是最新版本的 MVC。)

但我似乎对以下代码行有问题:

var validator = $("form").validate(); // obtain validator

此行会导致错误,因为 $("form").validate 未定义。

不幸的是,我真的不知道这个特定的代码是如何工作的,所以我不确定如何修复它。有人可以解释这里发生了什么吗? validate 应该在哪里定义?

【问题讨论】:

  • 它应该是在 jQuery validate 插件中定义的,你可能包含在某个地方?
  • 我想知道这一点。但我的布局文件包含@Styles.Render("~/Content/css") @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/jqueryval") @Scripts.Render("~/bundles/modernizr")
  • 试试 console.log($("form")) 这样您就可以在控制台中检查表单是否实际上在 DOM 中,以及是否可以在 jquery 对象的原型下找到 validate 作为方法(__proto__)。

标签: javascript jquery asp.net-mvc model-view-controller wizard


【解决方案1】:

实际上,默认情况下 _Layout.cshtml 文件在页面末尾(就在结束 body 标记之前)包含脚本文件,如果您在浏览器中查看呈现的页面,您会看到。

来自常规视图的内容嵌入在布局文件中调用 @RenderBody 的位置。如您所见,对 RenderBody 的调用位于包含的脚本之前。这就是为什么您编写的任何引用外部代码的 javascript 代码都不起作用的原因。

“脚本”部分在布局文件中定义,即使在包含的脚本之后也是如此。所以如果你使用@section "Scripts",你放在那里的任意代码保证会出现在包含的 js 文件之后,因此它会起作用。

希望它现在更有意义。

【讨论】:

  • 是的,这就是问题所在。经过一番研究和挠头后,我昨晚真的想通了。 (顺便说一句,没有必要在回答中提到我的名字@JonathanWood。)谢谢。
  • 我开始写评论,然后才意识到它会太长,因此将其转换为答案。修复。谢谢。
【解决方案2】:

听起来您没有将 jquery validate 作为脚本包含在您的 html 文件中。你做了吗:

<script src="http://cdn.jsdelivr.net/jquery.validation/1.13.1/jquery.validate.min.js"></script> 

或者在本地包含它?

【讨论】:

  • 我没有确切的那一行,但我的布局文件顶部有 @Scripts.Render("~/bundles/jquery")@Scripts.Render("~/bundles/jqueryval")
  • 可能是你的 jqueryval 的路径不正确,你能仔细检查一下吗?
  • 我渲染的标记包括&lt;script src="/Scripts/jquery.validate.js"&gt;&lt;/script&gt;,我可以从浏览器中点击链接,脚本文件按预期出现。
  • @JonathanWood - 然后文件就在那里,奇怪的是函数不会被定义。您确定该插件包含在您的问题等脚本之前吗?
  • 你能澄清一下plugin在这里具体指的是什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 2019-10-05
相关资源
最近更新 更多