25

这是表单的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],...

这里可能是什么问题?

4

14 回答 14

23

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

于 2012-09-14T12:12:57.343 回答
13

对于仍在寻找答案的任何人,并且上面的答案不起作用..

我花了最后 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 后跟 validate 后跟 unobtrusive。

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

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

    $.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 页面中,还要确保主页上的元素仍然具有唯一的名称。

希望这可以帮助。

于 2015-04-09T15:58:36.170 回答
11

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

像这样:

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

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

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

        //Validate Form
        var ids = [];
        $("form").each(function () {
            ids.push(this.id);
        });
        var formId = "#" + ids[0]
        $(formId).validate();
于 2012-09-13T13:57:14.980 回答
2

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

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

并且该id元素form无效

于 2014-02-17T12:33:36.037 回答
2

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

_.delay(doValidations);

function doValidations() {
...
});
于 2014-05-30T23:14:13.380 回答
2

因为这是 Google 显示的“验证器未定义”的第一个主题,所以我将描述我解决的问题,也许有人会觉得它有帮助。

我正在使用“maxlength”属性(没什么花哨的),我得到了这个错误。原因是嵌套表格。其中一个 textarea 在两种形式中。当您在主视图中有带有表单的模式(对话框)时,可能会发生这种情况。

于 2016-06-21T13:13:48.993 回答
1

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

于 2015-04-18T18:56:39.030 回答
1

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

于 2014-03-05T12:27:05.663 回答
0

我收到以下错误:

未捕获的类型错误:d 未定义

发生错误是因为表单 id 和模型 div id 相同。更改ID后错误已解决。

于 2021-09-12T18:26:34.927 回答
0

我的元素中有form="form-name属性。<input>立即删除它可以解决错误。

于 2019-12-05T14:30:52.517 回答
0

该插件位于单独的库中,您需要将它们包含在您的 html 中。

<script src="../jquery-validation/dist/jquery-validate.min.js"></script>
<script src="../jquery-validation/dist/additional-methods.min.js"></script>
于 2015-08-20T05:09:32.897 回答
0

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

于 2018-06-14T22:57:17.373 回答
0

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

$(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;
    });
于 2015-11-24T12:41:34.053 回答
0

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

document.contains(element)

希望这可以帮助某人。

于 2018-01-30T12:08:24.717 回答