0

私の MVC4 アプリでは、フォーム内のいくつかのテキスト ボックスに対してクライアント側バリデーターを作成しようとしています。フォームは Register.cshtml ビューに含まれています (このビューは、フォーム認証プロジェクトで新しい MVC4 を作成すると、VS2010 によって自動的に作成されます)。

フォームは [送信] ボタンの検証を既に実装していますが、フォーカスがテキスト ボックスを離れるとすぐに動作するバリデーターが必要です。テキスト ボックスのすぐ横に赤いフォントでインライン エラーが表示されるはずです。正常に検証された場合は、「ok」というメッセージが再び表示されます。

問題: .js バリデーターが機能しません。Firebug さんのコメント:

$document が定義されていません。$document.ready(

また、alert() も試しました。document.ready 関数の外に配置すると、ポップします。中に入ると、ポップしません。registerForm.js のコード:

$document.ready(
function () 
{
    $('#registration form').validate
    (
        {
            rules: 
            {
                UserName: { required: true }
            },
            success: function (label) 
            {
                label.Text('OK!').addClass('IsInputValid');
            }
        }
    )
}
);

この JavaScript を追加するバンドルは次のとおりです。

            bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                    "~/Scripts/jquery.unobtrusive*",
                    "~/Scripts/registerForm.js",
                    "~/Scripts/jquery.validate*"));

最後に、ビュー:

<div id="registration">
@using (Html.BeginForm()) {
@Html.ValidationSummary()

<fieldset>
    <legend>Registration Form</legend>
    <ol>
        <li>
            @Html.LabelFor(m => m.UserName)
            @Html.TextBoxFor(m => m.UserName)
        </li>
        <li>
            @Html.LabelFor(m => m.Email) 
            @Html.TextBoxFor(m => m.Email)
        </li>
        <li>
            @Html.LabelFor(m => m.Password)
            @Html.PasswordFor(m => m.Password)
        </li>
        <li>
            @Html.LabelFor(m => m.ConfirmPassword)
            @Html.PasswordFor(m => m.ConfirmPassword)
        </li>
    </ol>
    <input type="submit" value="Register" />
</fieldset>
 }
</div>

@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}

js の動作を妨げるものは何ですか? 私はすでにこれを理解しようとして約5時間を費やしました。何か提案があれば教えてください。

よろしく、

4

3 に答える 3

1

ドキュメント オブジェクトには jQuery ラッパーを使用する必要があります。

$(document).ready(function () {
    // your function
});
于 2012-06-17T17:03:25.090 に答える
1

$document定義されていますか?jQuery は$オブジェクトを定義します。そのオブジェクトを関数として使用し、それを含むセレクターを渡し、それdocumentを呼び出すことができます.ready()

$(document).ready(someFunction);
于 2012-06-17T17:03:35.227 に答える
1
 @Html.TextBoxFor(m => m.UserName, new { @class = "required" })

ここではJSは必要ありません。$document = $(document)そして、どこかで var を定義していない限り、 $document が正しい構文ではないことについて他の誰もが言っていること。

于 2012-06-17T17:03:54.123 に答える