0

在我的 MVC4 应用程序中,我正在尝试为表单中的某些文本框创建客户端验证器。该表单包含在 Register.cshtml 视图中(当我使用 formsauthentication 项目创建新的 MVC4 时,VS2010 会自动创建此视图)。

表单已经在提交按钮上实现了验证,但我想要一个验证器,一旦焦点离开文本框就起作用 - 应该在文本框旁边显示一个内联错误,带有红色字体。如果验证正常,它应该再次显示消息“ok”。

问题: .js 验证器不起作用。萤火虫 说:

$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 回答