Вся ваша проблема здесь ...
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.