如何在 jquery 验证中只隐藏默认错误信息?
How to only hide the default error message in jquery validate?
我有几个字段,对于出生日期字段,我想在需要时隐藏错误消息,但显示所有其他错误消息。我有以下隐藏所有错误消息的代码:
<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);
};
},
})
所以基本上我想隐藏默认错误消息 ("Required field is missing: Day of Birth") 但保留最小值和最大值的消息,我该怎么做?
你的全部问题都在这里...
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
的字段的所有消息。
换句话说,您为一个字段的所有规则设置了相同的自定义消息,然后隐藏了同一字段的 any/all 消息。没有意义。
如果您只想在一个特定字段上隐藏 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"
}
}
})
});
就像 OP 在他的设置中一样;通过 .validate()
方法声明的规则与一些内联 HTML5 属性的混合。这是相同的解决方案,因为自定义消息是通过插件定义的:
使用 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
中有一个条件函数,它隐藏整个字段的 "the validation message"。同样,在何处声明规则并不重要,因为所有规则和消息都来自 jQuery 验证插件。
我有几个字段,对于出生日期字段,我想在需要时隐藏错误消息,但显示所有其他错误消息。我有以下隐藏所有错误消息的代码:
<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);
};
},
})
所以基本上我想隐藏默认错误消息 ("Required field is missing: Day of Birth") 但保留最小值和最大值的消息,我该怎么做?
你的全部问题都在这里...
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
的字段的所有消息。
换句话说,您为一个字段的所有规则设置了相同的自定义消息,然后隐藏了同一字段的 any/all 消息。没有意义。
如果您只想在一个特定字段上隐藏 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"
}
}
})
});
就像 OP 在他的设置中一样;通过 .validate()
方法声明的规则与一些内联 HTML5 属性的混合。这是相同的解决方案,因为自定义消息是通过插件定义的:
使用 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
中有一个条件函数,它隐藏整个字段的 "the validation message"。同样,在何处声明规则并不重要,因为所有规则和消息都来自 jQuery 验证插件。