Как скрыть только сообщение об ошибке по умолчанию в jquery validate? - PullRequest
0 голосов
/ 11 декабря 2019

У меня есть несколько полей, в которых в поле «День рождения» я хотел бы скрыть сообщение об ошибке, когда это необходимо, но показать все другие сообщения об ошибке. У меня есть следующий код, который скрывает все сообщения об ошибках:

<input type="number" id="DayOfBirth" min="1" max="31" class="input error" name="DayOfBirth" placeholder="DD" aria-invalid="true">

JS:

rules = {
    DayOfBirth: required
};
messages = {
    DayOfBirth: "Required field is missing: Day of Birth"
};
$('#myForm').validate({
    rules: rules,
    messages: messages,
    errorPlacement: function (error, element) {
        if (element.attr("name") == "DayOfBirth") {
            error.hide();
        }
        else {
            error.insertAfter(element);
        };
    },
})

Так что в основном я хотел бы скрыть сообщение об ошибке по умолчанию ("Обязательное поле"отсутствует: день рождения "), но сохраните сообщение для минимальных и максимальных значений. Как я могу это сделать?

1 Ответ

0 голосов
/ 12 декабря 2019

Вся ваша проблема здесь ...

messages = {
    // same message for ALL rules on this field
    DayOfBirth: "Required field is missing: Day of Birth"
};

Это определяет ОДНО настраиваемое сообщение для ВСЕХ правил в поле с именем DayOfBirth.

Затем, насколько условно показаны правилаоснованный ТОЛЬКО на имени поля, это на самом деле прекрасно работает ...

errorPlacement: function (error, element) {
    if (element.attr("name") == "DayOfBirth") { 
        error.hide();  // hide ALL messages for the matching field
    }
    else {
        error.insertAfter(element);
    };
},

Однако, это будет скрывать ВСЕ сообщения для поля с именем DayOfBirth.

Другими словами,Вы установили одно и то же настраиваемое сообщение для всех правил в одном поле, но затем скрыли все / все сообщения для одного поля. Не имеет смысла.


Если вы хотите скрыть сообщения для правила required только в одном конкретном поле, тогда просто установите его настраиваемое сообщение пустым ...

$(document).ready(function() {

    $('#myForm').validate({
        rules: {
            foo: {
                required: true,
                minlength: 5
            },
            bar: {
                required: true
            }
        },
        messages: {
            foo: {
                required: "",  // show nothing
                minlength: "foo too short"
            },
            bar: {
                required: "bar is required"
            }
        }
    })

});

DEMO: jsfiddle.net / e8jwLfb2 /


И, как OP имеет в своей настройке;набор правил, объявленных с помощью метода .validate(), вместе с некоторыми встроенными атрибутами HTML5. Это то же решение, так как пользовательские сообщения определяются с помощью плагина:

DEMO 2: jsfiddle.net / bLn169h2 /

При использовании messages объект, вы можете установить пользовательские сообщения для КАЖДОГО правила в поле ...

messages: {
    foo: {
        required: "custom required message for foo field",
        minlength:  "custom minlength message for foo field"
    }
}

ИЛИ для всего поля ...

messages: {
    foo: "custom message for all rules on foo field"
}

Неважно, как илигде каждое правило было объявлено, это пользовательское сообщение будет переопределено независимо. Таким образом, в вашем случае вы определили пользовательское сообщение для имени поля, которое переопределит все сообщения проверки для всех правил в этом поле. Затем у вас есть условная функция в errorPlacement, которая скрывает «сообщение проверки» для всего поля. Опять же, не имеет значения, где было объявлено правило, поскольку все правила и сообщения поступают через плагин jQuery Validate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...