jQuery验证插件错误:TypeError:验证程序未定义

时间:2012-09-13 13:22:04

标签: jquery jquery-validate

以下是表单的html代码:

<form method="post" id="login" action="/login">
 <div class="login-element">
    <label for="email">E-Mail</label>
    <input type="text" name="email">
</div>
<div class="login-element">
    <label for="password">Passwort</label>
    <input type="password"  name="password">
</div>
<div class="login-element">
    <input type="submit" value="Login">
</div>
</form>

以下是我用于验证的代码:

    $(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],...

这可能是什么问题?

13 个答案:

答案 0 :(得分:21)

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

答案 1 :(得分:8)

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

像这样:

<script src="/js/libs/jquery.validate.js" type="text/javascript"></script>

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

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

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

答案 2 :(得分:8)

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

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

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

一次在头部,我已经包含3个脚本

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jquery.validate.min.js"></script>
    <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>

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

<script src="~/Scripts/jquery-1.10.2.min.js"></script>

这会重置$的验证器功能并导致一切中断。

检查验证未触发的情况。

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

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

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

    $.validator.unobstrusive.parse('#myForm')
    
  4.  $('#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页面中不再包含脚本,同时确保主页面上的元素仍具有唯一名称。
    2. 希望这有帮助。

答案 3 :(得分:2)

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

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

id元素的form无效

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

_.delay(doValidations);

function doValidations() {
...
});

答案 6 :(得分:1)

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

答案 7 :(得分:1)

因为这是Google为#34显示的第一个话题;验证者未定义&#34;然后我将描述我解决的问题,也许有人会发现它有用。

我正在使用&#39; maxlength&#39;属性(没什么特别的)我得到了这个错误。原因是嵌套表格。其中一个文本区域在两种形式内。当你在主视图中有表格的模态(对话框)时会发生这种情况。

答案 8 :(得分:0)

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

array1 = [{"name":"John","gred_id":1},{"name":"James","gred_id":2}];

答案 9 :(得分:0)

同样发生在这里。对我来说,这是我的代码中的一个错字:

ud.downloadTime

答案 10 :(得分:0)

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

document.contains(element)

希望这有助于某人。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

我在form="form-name元素中拥有<input>属性。立即将其删除即可解决该错误。