jQueryvalidation插件错误:TypeError:validation程序未定义

这是表单的html代码:

这是我用于validation的代码:

  $(document).ready(function() { $("#login").validate({ debug: true, rules: { email: { required: true, email: true }, password: { required: true } }, messages: { email: { required: "Please enter a email adress", email: "Please enter a valid email address" }, password:"Please enter password" } }); }); 

在控制台中记录以下错误:

 TypeError: validator is undefined ...or.settings[eventType] && validator.settings[eventType].call(validator, this[0],... 

这可能是什么问题?

发生此错误是因为我有另一个具有相同ID的html元素。 删除后,id代码工作正常。

您需要在文档的头部包含validation脚本。

像这样:

  

另外,请在呈现的HTML中检查您的表单ID是否正确。

我使用此代码在我的网站上调用validation

  //Validate Form var ids = []; $("form").each(function () { ids.push(this.id); }); var formId = "#" + ids[0] $(formId).validate(); 

对于仍在寻找答案的人,上面的答案都不起作用..

我花了最后3个小时尝试所有解决方案,但没有一个能够工作。

我终于意识到一个非常愚蠢的错误,我已经在我的应用程序中初始化了两次Jquery

曾经在我已经包含3个脚本的头部

    

再次在页面的末尾,我只有这条线。

  

这正在重置$的validation器函数并导致所有内容中断。

有些事情需要检查validation未触发的情况。

  1. 脚本的顺序是否正确? jquery后跟validation,然后是不引人注意的。

  2. 是否定义了$ .validator函数? 在浏览器的控制台中快速检查

  3. 要动态创建要validation的表单吗? 如果是这样,你可能需要重新初始化表单上的validation器插件,我发现这样做的最佳方法如下所述,选择适合你的那个。

     $.validator.unobstrusive.parse('#myForm') 

要么

  $('#myForm').validate() // this just makes the validator plugin consider the form for unobstrusive validation 

要么

 $('#myForm').valid() // this will trigger unobstrusive validation on the form. 
  1. 如果许多表单都有复杂的ajax加载,请确保在每个ajax页面中不再一次包含脚本,同时确保主页面上的元素仍具有唯一的名称。

希望这可以帮助。

同样的问题出现在我面前。 出现错误的原因是我使用的代码是什么:

 if ($("#invalidFormId").valid()) { .... } 

并且form元素的id无效

在我的情况下,问题是有两个实例版本的Jquery UI i JQuery。 这使得Jquery普通代码工作正常但删除了$ .validator的内容。

在我的情况下,错误是因为validation器被过早调用。 我将代码移动到一个单独的函数,并使用underscore.js的延迟方法调用它。 工作就像一个魅力。

 _.delay(doValidations); function doValidations() { ... }); 

我在父视图(_Layout.cshtml)中有@Scripts.Render("~/bundles/jquery") ,并在另一个视图中定义了一些其他jquery脚本标记,它们发生了冲突。

因为这是Google为“validation器未定义”而显示的第一个主题,然后我将描述我已解决的问题,也许有人会发现它有用。

我使用’maxlength’属性(没什么特别的),我得到了这个错误。 原因是嵌套表格。 其中一个文本区域在两种forms内。 当您在主视图中有表单的模态(对话框)时,可能会发生这种情况。

该插件位于不同的库中,您需要在html中包含这些库。

   

同样发生在这里。 对我来说,这是我的代码中的拼写错误:

 $(document).ready(function(){ //START of validate $('#reply').validate({ rules:{ message:{ required: true, }, }, submitHandler: function(form) { var data = $("#reply").serialize(); $.ajax({ type:"POST", url:"ajax/scripts/msg_crt.php", data:data, success:function(data){ alert("Loaded"); } }); } }); //END of validate }); $(document).on('click','#send', function(){ if($('#replay').valid()){// <--- Here is my selector typo $("#replay").submit(); // <--- Here is my selector typo } return false; }); 

调用validator.destroy()时,我遇到了这个问题 – 错误发生在插件的staticRules方法中。 事实certificate是关联的表单元素(element.form)与DOM分离。 我通过使用以下方法在调用destroy之前检查元素是否在DOM中来解决它:

 document.contains(element) 

希望这有助于某人。

在我的情况下,我 $(document).ready 之前调用$.validator $(document).ready 。 一旦我将它移动到从ready调用的函数,它就可以工作了。 它会在ready之后或之间工作,但不会之前。