"label.error" 似乎总是出现在每个 bootstrap 选项卡上

"label.error" seems to always be present on every bootstrap tab

我不明白为什么 $('label.error') 会出现在每个 bootstrap 选项卡上,而该特定元素应该只显示在 1 个选项卡上。我有一个字段未在 bootstrap 选项卡上通过验证,因此带有 class 错误的 label 被附加到违规字段的 DOM 上。但是,我似乎无法让我的代码落在具有违规字段的特定选项卡上。我在下面的代码中做错了什么? isErrorPresent 只应在 1 个特定选项卡上为真,但每个选项卡都显示为真...

$("#" + formId).validate({ignore:""}).form(); // ignore:"" allows for hidden fields to be validated as well

    $(".tab-content").find("div.tab-pane").each(function (index, tab) {
        var id = $(tab).attr("id");
        $('a[href="#' + id + '"]').click();

        alert('processing tab ' + id);

        var isErrorPresent = $('div.tab-pane, div.active').find('label.error').length > 0;

        alert(isErrorPresent);

//        if (isErrorPresent) {
//            alert("label.error detected...");
//            hasError = true;
//            return false; // Break .each loop and return to page
//        }
    });

没有看到更多标记,这就是我的想法:

您正在这样做:

var isErrorPresent = $('div.tab-pane, div.active').find('label.error').length > 0;

选择器中有一个逗号,表示您要检查 div.tab-pane && div.active

这是你想要的吗?也许你打算这样做(没有逗号也没有 space):

var isErrorPresent = $('div.tab-pane.active').find('label.error').length > 0;

在@Red2678 的帮助下解决了这个问题(谢谢)...这就是现在对我有用的...

    // Check all tabs for errors & show first tab that has errors
    $(".tab-content").find("div.tab-pane").each(function (index, tab) {
        var id = $(tab).attr("id");
        $('a[href="#' + id + '"]').click();

        $("#" + formId).validate().form();

        var activeTab = $('div.tab-pane.active');

        var isErrorPresent = false;
        if ($(activeTab).find('label.error').length > 0) {
            isErrorPresent = $(activeTab).find('label.error').css('display') !== 'none';
        }

        if (isErrorPresent) {
            hasError = true;
            return false; // Break .each loop and return to page
        }
    });