JQuery 验证器在 Bootstrap 手风琴上取消突出显示

JQuery Validator unhighlight on Bootstrap Accordion

在标准 bootstrap 手风琴上,我有一些标准 bootstrap 输入,我需要由小组验证。因此,如果出现错误,面板标题文本会改变颜色。当该面板内的所有字段都有效时,我还需要将其改回。

我使用的 JS 是:

var validator = $(this).data('validator');
    if (typeof (validator) != "undefined") {
        validator.settings.ignore = [];
        validator.settings.highlight = function (element, errorClass, validClass) {
            var formgroup = $(element).on().closest(".form-group");
            if (typeof (formgroup) !== "undefined") {
                formgroup.addClass("has-error");
                if (!formgroup.hasClass("conditional")) {
                    if (formgroup.is(":hidden")) {
                        formgroup.show();
                    }
                }
            }
            var accordionHead = $(element).on().closest(".panel");
            if (typeof (accordionHead) !== "undefined") {
                accordionHead.addClass("acc-error");
            }
        };
        validator.settings.unhighlight = function (element, errorClass, validClass) {
            $(element).on().closest(".form-group").removeClass("has-error");
        }
        validator.settings.unhighlight = function (element, errorClass, validClass) {
           $(element).on().closest(".panel").removeClass("acc-error");
        }
    }

然而,这一切所做的只是在留下一个无效字段时更改颜色,然后在输入另一个字段时再次将其更改回错误颜色。无论如何我可以解决这个问题吗?我已经尝试将验证从突出显示复制到取消突出显示,但这给了我同样的问题。

您的代码...

var formgroup = $(element).on().closest(".form-group");


您可以摆脱 .on() 并将您需要的所有内容组合到 unhighlight...

的一个实例中
validator.settings.unhighlight = function (element, errorClass, validClass) {
   $(element).closest(".form-group").removeClass("has-error");
   $(element).closest(".panel").removeClass("acc-error");
}

相应地清理其余代码。


if (typeof (validator) != "undefined") { ...

顺便说一句 - 使用 jQuery 时,您无需在选择对象或元素之前检查它是否存在。如果所选项目不存在,jQuery 将简单地忽略它而不会出现任何错误或问题。