3

我正在使用带有 twitter 引导程序的 ASP.net MVC。

我添加了以下内容以使有错误的字段在引导程序中正确设置样式

$.validator.setDefaults({
    highlight: function (element) {
        $(element).closest(".control-group").addClass("error");
    },
    unhighlight: function (element) {
        $(element).closest(".control-group").removeClass("error");
    }
});

这适用于除自定义验证属性之外的所有验证。我创建的自定义验证器检查是否选中了一个复选框,如果没有,它希望在文本字段中输入一些内容。这只是一个示例,但我创建的其他自定义验证属性以与下面描述的相同方式失败。

如果我提交表单,所有错误的样式都会正确设置,但使用我的自定义验证器的字段除外。但是我知道验证器运行是因为出现了错误消息,但消息和字段是黑色而不是红色。

如果我在字段中输入一些文本以满足验证器的要求,错误消息就会消失。然后,如果我删除该文本,则会返回错误消息,并且所有内容都应为红色。

然后,如果我再次提交表单,即使错误仍然存​​在,红色样式也会消失,但仅对于具有自定义验证器的字段,所有其他错误仍为红色。

在表单提交时,我设置的默认值(如上所示)不会针对具有自定义验证器的字段运行,但默认值会针对其他所有内容运行。

然而,通过自定义验证器在字段上的 on blur 和 key up 事件,一切都按预期运行,并且所有样式都按预期工作。

我不知道接下来要看什么。任何帮助/方向表示赞赏。

4

1 回答 1

0

我最近遇到了同样的问题,直到我发现我在同一个.control-group. (<input type="hidden">在我的情况下是字段)。如果这也适用于您的情况,您可以使用errorClasshighlight和提供的unhighlight方法,如下所示:

function highlight(element, errorClass, validClass) {
    $(element)
        .addClass(errorClass)
        .closest(".control-group")
        .addClass("error");
};

function unhighlight(element, errorClass, validClass) {
    var c = $(element)
        .removeClass(errorClass)
        .closest(".control-group");
    // make sure not to remove parent container error class, 
    //if there is still an invalid input field inside
    if (c.find("." + errorClass).length < 1) 
        c.removeClass("error");
};
于 2013-06-27T20:11:39.317 回答