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 を 2 回初期化していました。

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>

また、レンダリングされた HTML で、フォーム ID が正しいことを確認してください。

このコードを使用して、自分のサイトで検証を呼び出します

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

私の場合、バリデーターの呼び出しが早すぎたため、エラーが発生しました。コードを別の関数に移動し、underscore.js の delay メソッドを使用して呼び出しました。魅力のように働きました。

_.delay(doValidations);

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

同じ問題が私に現れました。そのエラーの理由は、私がコードを使用していたものです:

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

要素のが有効ではありませんでしidform

于 2014-02-17T12:33:36.037 に答える
1

私は@Scripts.Render("~/bundles/jquery")親ビュー (_Layout.cshtml) にいて、別のビューで他のいくつかの jquery Script タグも定義していましたが、衝突しました。

于 2015-04-18T18:56:39.030 に答える
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

ここでも同じことが起こりました。私にとっては、コードのタイプミスでした:

$(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 に答える